C++11新特性
1.原始字面量
- 解决字符串的歧义问题,比如转义字符,我们可以使用原始字面量
//在Windows中(Linux是斜杠,所以不需要转义),我们需要对路径的字符串中反斜杠转义
//不转义
string s = "D:\hello\world\test.txt";
cout<
对于较长的字符串,我们可以换行显示,但是需要使用反斜杠\连接(python中也可这样做),也可以不用\连接,使用原始字面量亦可,可以提高可读性
string s = "\
\
\
火影\
\
\
";
cout<
火影
)";
cout<
2.指针空值类型 - nullptr
nullptr用于初始话空指针,之前版本的CPP使用NULL初始化空指针,可以看到在CPP中NULL被定义为0,而在C语言中定义为((void*)0).
这是因为在CPP中,语言对于类型的要求更加的严格了,CPP不允许(void*)的变量隐式转换为其他类型
//这样才是正确的
int *ptr5 = (int*)ptr4;
//nullptr会自动转换为对应的变量类型,对于ptr3,nullptr会是int*类型,而ptr2,nullptr会是void*类型
int * ptr3 = nullptr;
void *ptr2 = nullptr;
有一点值得注意,nullptr无法转化为整形,但可以隐式转化匹配指针类型,相比于NULL与0,更加的健壮。
比如对于如下例子,NULL就不会调用形参为指针的函数。
void func(char *p);
void func(int p);
3.constexpr
- cosnt
我们可以通过CPP中的const设置常量,但是const有两种语义:变量只读,修饰常量,比如: