C++常量的表示
一、char型常量
(一)单个字符:用单引号定界,如'a',C++转义字符如下:
(01)\n 换行
(02)\r 回车
(03)\t 水平制表符
(04)\v 垂直制表符
(05)\b 退格
(06)\a 振铃
(07)\\ 字符\
(08)\' 字符'
(09)\" 字符"
(10)\... 1-3位八进制ASCII码代表的字符('\101')
(11)\x..... 十六进制ASCII码代表的字符,位数约束不严格,在字符串表示某个字符时请慎
用之
(12)\uxxxx 四位16进制数字
或\Uxxxxxxxx八位16进制数字实现通用符号(Universal character name)
注意,必须是四位或八位,位数少或多都会出错。
(二)字符串,用双引号定界,如"Code::Blocks",注意字符串的长度与占用内存的大小,因字符串结
束标志为'\0',所以占用内存的大小比实际可用长度多1个字符。字符串结束标志不必特别指明,
"abcdeabcde\0",特别指明反而会再多占用一个字节的内存空间。
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc,char** argv) {
char s[13]="abcdeabcde";
char s1[]="abcdeabcde";
char s2[]="abcdeabcde\0\0\0\0";
cout<<sizeof(s)<<endl;
cout<<strlen(s)<<endl;
cout<<sizeof(s1)<<endl;
cout<<strlen(s1)<<endl;
cout<<sizeof(s2)<<endl;
cout<<strlen(s2)<<endl;
return EXIT_SUCCESS;
}
//-----
结果为:
13
10
11
10
15
10
//-----
(三)wchar_t型常量加前缀L,只能是大写L。如:
wchar_t c=L'A';//这里的L可不加,看编译器是否认可
wchar_t cc[]=L"mytest";//这里的L必须加
例:
#include <iostream>
using std::cout;
using std::endl;
int main(int argc,char** argv) {
wchar_t c=L'A';
char cc='A';
wchar_t cp[]=L"mytest";
char ccp[]="mytest1";
cout<<c<<endl;
cout<<(char)c<<endl;
cout<<cc<<endl;
cout<<cp<<endl;
cout<<ccp<<endl;
return EXIT_SUCCESS;
}
//-----
65
A
A
0x22ff60
mytest1
//-----
二、整型常量
(一)书写常量时,若不加任何修饰符,编译器通常会认为是int整型,但有时也会根据操作自动实现
合适的转换。
#include <iostream>
#include <climits>
using namespace std;
int main(int argc,char** argv) {
cout<<INT_MAX<<endl;
cout<<SHRT_MAX<<endl;
short x=32768;
short k=32767+1;
long long y=2147483647;
long long d=INT_MAX+1;
cout<<x<<endl;
cout<<k<<endl;
cout<<y<<endl;
cout<<d<<endl;
return EXIT_SUCCESS;
}
//-----
2147483647
32767
-32768
-32768
2147483647
-2147483648
//-----
(二)无符号整型后缀是U(u),long型后缀是L(l),long long型后缀是LL(ll),L或LL或以与U组合。
三、浮点型常量
默认是double类型,表示float类型常量加后缀F(f),表示long double类型常量加后缀L(l)。
四、布尔型常量只有true和false,只认小写。当然可以用常数来表示,0为假,非零为真。
bool x=false;
bool y=1.234;
cout<<x<<endl;
cout.setf(ios_base::boolalpha);
cout<<y<<endl;
//-----
0
true
//-----
例1:只有一个函数,但调用时参数不同,编译器尽量匹配
#include <iostream>
using namespace std;
void show(long);
int main(int argc,char** argv) {
show(123);
show(123L);
show(123UL);
}
void show(long demo) {
cout<<"long"<<endl;
}
//-----
long
long
long
//-----
例2:有多个函数,编译器会认为是人为设计函数重载,将不再自动匹配
#include <iostream>
using namespace std;
void show(int);
void show(long);
void show(unsigned long);
int main(int argc,char** argv) {
show(123);
show(123L);
show(123UL);//改为show(123LL)试试如何?将会出错。
}
void show(int demo) {
cout<<"int"<<endl;
}
void show(long demo) {
cout<<"long"<<endl;
}
void show(unsigned long demo) {
cout<<"unsigned long"<<endl;
}
//-----
int
long
unsigned long
//-----