41.两个右尖括号
>
在模板中不再被判定为右移, 需要右移需要加圆括号()
42.
auto
类型推导, 编译时推导int a = 1; auto b = a; //b的类型为int
1):
auto
不能作函数形参类型
2):auto
不能对结构体中的肥静态成员进行推导
3):auto
不能声明数组
4):auto
不能在实例化模板时作为模板参数
43.
decltype
类型推导, 编译时推导int a = 1; decltype(a) b; //b的类型为Int uding size_t = decltype(sizeof(0)); //与using/typydef合用
1):
decltype
不能推导重载的函数
2):decltype
将亡值推导为右值引用
3):decltype
将左值推导为引用, 如三元运算符
,带圆括号的左值
,++i
,arr[0]
,*ptr
4): 以上都不是,则推导为本类型
44.追踪返回类型, 编译时推导
template<typename T1, typename T@> auto Func(const T1& a, const T@& b) -> decltype(a + b){ return a + b; }
45.基于范围的
for
循环vector<int> MyVector= {1, 2, 3, 4}; for(auto p : MyVector) { cout << p << endl; //p是解引用后的对象, 无需再*p解引用 }
条件: 迭代对象要实现
++
和==
等操作符,普通已知长度的数组(未知长度的不行), 类要有begin
函数和end
函数
51.强类型枚举
enum class MyEnum: char{ e1, e2, e3}; //定义一个以char为底层实现的强类型枚举 MyEnum a = e1; //错误 MyEnum b = MyEnum::e1; //通过 MyEnum c = 2; //错误 Myenum d = MyEnum::e2; if(d > 1){} //错误 if((char)d > 1){} //通过
52.智能指针
unique_ptr<int> up1(new int(11)); //无法被复制 unique_ptr<int> up2 = up1; //编译错误, 指针唯一 unique_ptr<int> up3 = move(up1); //up1的控制权转移给up3 up3.reset(); //显式释放 up1.reset(); //不会出错
unique_ptr
只允许唯一指针指向内存
shared_ptr
则允许共享同一块内存,它在实现上采用了引用计数,只有在计数归零时才真正释放内存
weak_ptr
不拥有控制权,其成员函数lock()
返回其指向内存的一个shared_ptr
对象,若其内存无效则返回nullptr
参考资料: <<深入理解C++11: C++11新特性解析与应用>>
标签:11,decltype,推导,auto,c++,MyEnum,类型,ptr From: https://www.cnblogs.com/redraincontrol/p/18321776