c++11新特性注意点

Posted pusidun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++11新特性注意点相关的知识,希望对你有一定的参考价值。

本文记录下一些c++11新特性需要注意的方面,供日后参考

 一、auto

auto可以当成“占位符”,根据右边的类型自动推导出变量的类型。需要注意的是

  1. auto不能解决溢出的问题。
  2. auto可以与指针和引用结合使用。和指针结合使用时,auto或者auto * 都可以,和引用结合使用时必须写成auto &
  3. auto “带不走”cv限制符 const ,volatile属性,需要cv属性时声明const auto,volatile auto
  4. auto声明多个变量时,以第一个变量推导出的类型为准
unsigned int a = 2^32-1;
unsigned int b = 1;
auto c = a + b; //照样溢出,不会自动转型,c的类型还是unsigned int

int a = 0;
int *pa = &a;
auto *pa1 = &a; // 等价 auto pa1 = &a;
auto &ra = a;

auto x = 1, y = 2; //int x,y
const auto *m = &x, n = 1; //auto占位int,可以编译通过
auto i = 1, j = 3.14f; //auto是int,j精度损失,编译失败

以下几种情况避免使用auto

  1.  做函数的形参
  2. 结构体中,非静态成员变量不能是auto
  3. 声明auto数组
  4. 实例化模板时用auto做模板参数

二、decltype

类型推导规则decltype(e)

  1. 如果e是一个没有带括号的标记符表达式或者类成员访问表达式,那么decltype(e)就是e所命名的实体的类型。此外,如果e是一个被重载的函数,则会导致编译时错误
  2. 否则,假设e的类型是T,如果e是一个将亡值,那么decltype(e)为T&&
  3. 否则,假设e的类型是T,如果e是一个左值,则decltype(e)为T&
  4. 否则,假设e的类型是T,则decltype(e)为T

 

以上是关于c++11新特性注意点的主要内容,如果未能解决你的问题,请参考以下文章

C++11新特性应用--实现延时求值(std::function和std::bind)

C# 11 的新特性和改进前瞻

3.2 C++11 新特性

c++11 新特性之 autokeyword

C++11新特性:19—— C++11右值引用

C++11新特性详解