C++Primer第五版【学习笔记】——auto,decltype【C++11】
来源:互联网 发布:网络段子里的老司机 编辑:程序博客网 时间:2024/05/17 04:52
1. auto
我们经常会需要将表达式的值保存在变量中。要声明变量,我们需要知道表达式的类型。但是要确定表达式的类型,有时候是很困难的。C++11新标准引入了auto类型声明符,使变量的类型由编译器通过表达式的推测来确定。比如:
auto avalue = value1 + value2;
如果value1和value2为double类型,则avalue为double类型。如果value1和value2为int类型,则avalue也为int类型。
如果使用引用来初始化auto类型,则该变量的类型为引用绑定对象的类型。
int i = 0, &ri = i;auto a = ri; // a的类型为int
auto声明一般会忽略掉顶级(top-level)const,而低级const则会保留。
int i = 0;const int ci = i, &cr = ci;auto b = ci; // b : intauto c = cr; // c : intauto d = &i; // d : int *auto e = &ci; // e : const int *
如果要声明为顶级const,则需要显式定义:
const auto f = ci; // f : const int
当定义一个auto类型的引用时,初始化中的顶级const会保留,因为引用绑定到带const的类型,其实是低级const。
auto &g = ci; // g: const int &auto &h = 42; // error: 不能将普通的引用绑定到一个字面值const auto &j = 42; // ok: 可以将const引用绑定到字面值const auto &k = ci; // k : const int &const
2.decltype
有时,我们想将变量的类型定义为某个表达式的类型,但是又不想用该表达式初始化这个变量(auto就是必须初始化)。新规则中引入了类型decltype,来解决这个问题。
decltype(f()) dv; //使用函数f()返还值得类型来定义dv
decltype处理top-level const和引用的方法与auto不同,顶级const和引用不会忽略。
const int ci = 0, &rci = ci;decltype(ci) x = 0; // x : const intdecltype(rci) y = x; // y : const int &decltype(rci) z; // error, z为const int & 没有初始化
decltype与引用
如果作用于decltype的不是一个变量,则会产生表达式的类型。一些表达式会使decltype产生引用类型。一般来说,当表达式产生的对象可以作为左值(可以出现在赋值语句的左边)时,decltype返回引用类型。
int i = 42, *p = &i, &r = i;decltype(r + 0) b; // ok: addition yields an intdecltype(*p) c; // error: c is int & and must be initialized
需要注意的是括号会影响产生的类型:
int i = 0;decltype((i)) d; // error: d is int & and must be initializeddecltype(i) e; // ok
decltype((variable))总是返回引用类型。
- C++Primer第五版【学习笔记】——auto,decltype【C++11】
- C++Primer学习之三auto和decltype
- C++primer---constexpr、类型别名、auto、decltype
- C++primer第五版【学习笔记】——第一章
- (c primer plus第五版) 学习笔记
- C++Primer(第五版)学习笔记
- C++primer第五版第一章学习笔记
- c++ primer(第五版)笔记 第二章(4)const, decltype, auto
- C++Primer第五版【学习笔记】——第五章 语句
- C++primer第五版第五章学习笔记
- C语言11中的auto和decltype
- C++14学习笔记(4)——decltype(auto)
- C++11学习笔记3---auto&decltype
- C++Primer第五版【笔记】——第六章 函数
- C++Primer第五版【笔记】——第七章 类
- [c++ primer笔记][c++11] auto与decltype
- C++Primer第五版【学习笔记】——第二章 变量和类型
- C++Primer第五版【学习笔记】——第三章 Strings,Vectors,Arrays
- java笔记 this关键字的含义和用处
- JAVA 文件的读写操作
- 谈final,finally,finalize的区别
- POJ 1426 —— Find The Multiple
- Jetty 源码分析
- C++Primer第五版【学习笔记】——auto,decltype【C++11】
- poj2942 圆桌骑士
- poj1702解题报告
- Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
- 排序周赛(no stl)
- Oracle 10g RAC add/delete votedisk
- C#重载运算符
- 无聊写个快排
- poj2041