一、新增变量和类型
类型:long long/constexpr/auto
常量:nullptr
关键字:decltype
指示符:using
1.long long类型:扩展精度浮点数,10位有效数字。
2.nullptr常量:用于生成空指针的方法。
int *p=NULL
int *p=0
int *p=nullptr
3.constexpr变量:由编译器来验证变量的值是否是一个常量表达式,声明为constexpr的变量一定是一个常量,而且必须用常量表达式来初始化。
int t = 10;//错误
const int t=10;//正确
constexpr int q = t + 20;
cout << "q" << q << endl;
4.auto类型:由编译器通过初始值来推算变量的类型,其定义的变量必须要有初始值。
int i = 0;
const int ci = i;
auto b = &i; // b是一个整形指针(整数的地址就是指向整数的指针)
auto c = &ci; // c是一个指向整数常量的指针(对常量对象取地址是一种底层const)
5.decltype指示符:选择并返回操作数的数据类型。
const int ci = 0, &cj = ci;
decltype(ci) x = 0;
decltype(cj) y = x;
decltype(cj) z; //错误,因为cj是一个引用,因此作为引用的 z 必须要进行初始化
6.using类型别名:两种方法可以用来定义类型别名,一种是 typedef ,另一种则是新标准中的 using。
using dnum = double;
using pstring = char*;
using func = int(int);
using pfunc = int(*)(int);
using arr = int[10];
using parr = int(*)[10];
using tparr = int(&)[10];
二、表达式
1.除法舍入规则:直接切除小数部分。
2.列表赋值用{}
3.sizeof可用于类成员:对数组执行sizeof运算得到整个数组所占空间的大小,等价于对数组中所有的元素各执行一次sizeof运算并将所得结果求和;对string对象或vector对象执行sizeof运算只返回该类型固定部分的大小,不会计算对象中的元素占用多少空间。
4.for范围语句:容器遍历
vector v={0,1,2,3,4,5,6,7};
//若想改变容器内元素的值,范围变量必须是**引用**类型
for (auto &r : v ) //对v中的每个元素
r*=2; //将v中的每个原素的值翻倍
三、函数
1.新增容器类cbegin和cend函数
2.新增标准库begin和end函数
3.列表初始化返回类型:可返回花括号包围的值的列表,如果列表为空,临时量执行初始化,否则,返回的值由函数的返回类型决定。
vector getAddress(int num) {
if (num == 0) {
return {};
}
return {"address1", "address2", "address3"};
}
4.定义尾置返回类型
// 返回类型为指针,该指针指向含有10个整数的数组
auto func(int i) -> int(*)[10] {
int arr[10] = {0};
return &arr;
}
四、类
1.使用=default生成默认构造函数:如果实现了默认的构造函数,编译器则不会自动生成默认版本;可以通过使用关键字 default 来控制默认构造函数的生成,显示的指示编译器生成该函数的默认版本。
class MyClass{
public:
MyClass()=default; //同时提供默认版本和带参版本
MyClass(int i):data(i){}
private:
int data;
};
2.使用delete禁止使用默认构造函数。
class MyClass
{
public:
MyClass()=default;
MyClass(const MyClass& )=delete;
};
int main() {
MyClass my;
MyClass my2(my); //报错
return 0;
}
3.可以使用类内初始化。
4.提供委托构造函数:一个委托构造函数使用它所属类的其它构造函数可以执行它自己的初始化过程。
class MyClass
{
public:
MyClass() : MyClass(10) {}
MyClass(int d) : data(d){}
inline int getData() {return data;}
private:
int data;
};
int main() {
MyClass my;
cout << my.getData() << endl;
return 0;
}
5.constexpr构造函数:如果成员函数标记为 constexpr,则默认其是内联函数,如果变量声明为constexpr,则默认其是 const。
class Square {
public:
constexpr Square(int e) : edge(e){};
constexpr int getArea() {return edge * edge;}
private:
int edge;
};
int main() {
Square s(10);
cout << s.getArea() << endl;
return 0;
}
参考资料:http://www.cnblogs.com/George1994/p/6684989.html