->字面量literal 是指在源代码中写出的固定常量,在C++98中只能是原生类型:
字符串字面量"hello"->const char[6]
整数字面量 1-> int
浮点数字面量 0.0 -> double
浮点数字面量 3.14f -> float
无符号长整数字面量 unsigned long -> 123456789ul
->C++11引入了自定义字面量,可以使用operator""后缀来将用户提供的字面量转换成实际的类型。
operator""s用于定义std::string;h min s ms us ns用于创建std::chrono::duration;
i il if 用于创建复数complex<double> complex<long double> complex<float>
length operator"" _m(double v)
{
return length(XXX);
}
this_thread::sleep_for(500ms);
cout << "hello world"s.substr(0, 5) << endl;
->C++14引入了二进制字面量
unsigned int mask = 0b11100000;
但是IOstream中只有dec hex oct三个操作器manipulator,没有bin,所以不能直接输出二进制数。可以用
cout << bitset<8>(mask) << endl;
->静态断言
C++98的assert允许在运行时检查一个函数的前置条件是否成立。没有方法允许开发人员在编译的时候检查假设是否成立。
C++11提供了静态断言机制。static_assert(编译期条件表达式,可选输出信息)
static_assert((alignment & (alignment - 1)) == 0, "Alignment must be power of two");
->C++14引入了数字分隔符
用于数字较长的时候增加可读性。C++14开始允许数字型字面量中任意添加',具体如何添加,由程序员根据实际情况进行约定。
->default 和 delete 成员函数
默认构造函数 析构函数 拷贝构造函数 拷贝赋值函数 移动构造函数 移动赋值函数
生成(或不生成)这些函数的规则
->override final 说明符
C++11引入的新说明符。加在类成员函数的声明的尾部。可以单个或组合使用。不是关键字,变量名仍可以用这两个字符。
override显示声明了成员函数是一个虚函数且覆盖了基类中的该函数。作用:
给开发人员明确的提示,这个函数覆盖了基类的成员函数;让编译器进行额外的检查,防止拼写错误或代码改动没有让基类和派生类的成员函数名称完全一致。
final则声明了成员函数是一个虚函数,且该虚函数不可在派生类中被覆盖。如果有一点没有满足的话,编译器会报错。final用在被定义的类或者结构名后面,作用是标志这个类或者结构不可被派生。