码迷,mamicode.com
首页 > 编程语言 > 详细

c++11新特性注意点

时间:2019-07-21 23:58:46      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:形参   否则   通过   int   问题   decltype   标记   解决   sig   

本文记录下一些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新特性注意点

标签:形参   否则   通过   int   问题   decltype   标记   解决   sig   

原文地址:https://www.cnblogs.com/pusidun/p/11223392.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!