1、 无符号类型
含有无符号类型的表达式,当一个算式表达式中既有unsigned int,又有int时,int会转化为unsigned int,
如int a=-1,unsigned b=1,则在我的机器中a*b=4294967295。
无符号数不会小于0也关系到循环的写法
for(int i=10;i>=0;--i) cout<<i<<endl;
从10到0降序输出
for(unsigned i=10;i>=0;--i) cout<<i<<endl;将会导致死循环,当i=0时再减去1得到结果-1并不满足无符号数要求,因此-1自动转换为一个合法的无符号数。
2、 字符串字面值分行书写
cout<<" a really long string literal " "that spans two lines"<<endl;等同于
cout<<"a really long string literal that spans two lines"<<endl;
3、 列表初始化
如果使用列表初始化且初始值存在丢失信息的风险,则编译器报错
double pi=3.14; int a{pi},b={pi};//错误,转换未执行,因为存在丢失信息的风险 int c(pi),d=pi; //正确,转换执行,且确实丢失了部分值
4、 Extern语句如果包含初始值就不再是声明,而变成定义了:
extern double pi = 3.14; //定义
5、 auto类型说明符
C++11引入auto,用它能让编译器替我们分析表达式的类型
double val1=2.0,val2=3.0; auto item=val1+val2;//item的类型是double
6、 decltype类型指示符
C++11引入decltype,选择并返回操作数的数据类型
const int ci=0, &cj=ci; decltype(ci) x=0;//x的类型是const int decltype(cj) y=x;//y的类型是const int&
注意点:decltype((variable))的结果永远是引用,decltype(variable)的结果只有当variable本身是引用是才是引用