auto类型说明符
来源:互联网 发布:网络直播 无聊 编辑:程序博客网 时间:2024/05/03 05:54
C++11新标准引入了auto类型说明符
用它能让编译器替我们分析表达式所属的类型 auto让编译器通过初始值来推算出标量的类型。
显然auto定义的变量必须有初始值
auto item = vall + val2; //item的类型通过val2和val1的相加的结果得出
使用auto也能在一条语句中声明多个变量 因为一条声明语句只能有一个基本数据类型 所以改语句中所有的变量的初始数据类型都必须是一样的才可以
复合型 常量和auto
编译器推断出来的auto类型有时候和初始值的类型并不一样 编译器会适当的地改变类型使其更符合初始化的规则
(1)首先 使用引用其实是使用的引用的对象,特别是当引用被当做初始值时,真正参与初始化的其实是引用对象的值。
此时编译器以引用对象的类型来作为auto的类型:
int i = 0,&r = i;
auto a = r; // a是一个整数的类型(r是i的别名,而i是一个整数类型
(2)其次 auto一般会忽视掉顶层的const,同时顶层的const側会保留下来,比如当初始值是一个指向常量的指针的时候
const int ci = i, &cr = ci;
auto b = ci; // b是一个整数(ci的顶层const特性被忽略掉了)
auto c = cr; //c是一个整数(cr是ci的别名,ci本身是一个顶层const)
auto d = &i; // d是一个整数指针(整数的地址就是指向整数的指针)
auto e = &ci;// e是一个指向整数常量的指针(对常量对象取地址是一种底层const)
如果希望推断出来的auto类型是一个顶层的const,需要明确的指出
const auto f = ci; //ci的推算类型是int,f 是const int;
(3)可以将引用设为auto,此时原来的初始化规则任然实用
auto & g = ci; // g是一个整数常量引用 绑定到ci
auto & h = 42; //错误: 不能为非常量引用绑定字面量
const auto & j = 42; //正确 可以为常量引用绑定字面量
设置一个类型为auto的引用时 初始值中的顶层常量属性仍然保留。
要在一条语句中定义读个变量 切记 符号&和* 只从属某个声明符号 而非基本数据类型的一部分 因此初始值必须是同一种类型
auto k = ci, &l = i; //k是整数,l是整数的引用
auto &m = ci, *p = &ci; //m是对整形常量的引用 p是指向整形常量的指针
auto &n = i,*p = &ci;
// n是整数类型 p是指向常量整数的指针 数据类型不一样 一个是int 一个是const int 所以错误
- auto类型说明符
- [C++] auto类型说明符
- auto类型说明符
- auto类型说明符
- C++ auto类型说明符
- auto类型说明符
- auto类型说明符
- c++ auto类型说明符
- C++11--auto类型说明符
- C++11auto类型说明符
- 类型别名+auto类型说明符+decltype类型说明符
- 类型别名、auto类型说明符和decltype类型说明符初探
- 类型别名定义及auto类型说明符
- c++primer之auto类型说明符
- 类型别名,auto类型说明符,decltype类型指示符
- c++基础--auto类型说明符/decltype类型指示符
- c++(14)处理类型--auto类型说明符
- 自动获取类型的auto和decltype类型说明符
- C++异常以及错误处理
- PB数据窗口控件之事件
- C++标准库-输入/输出流
- C++标准库-字符串string类
- DeepFace: Closing the Gap to Human-Level Performance in Face Verification
- auto类型说明符
- 项目感想------交叉核验
- mapreduce 剖析
- 网络共享中,弹出:登录失败:禁用当前的账户;
- HDU 4578 线段树 多lazy操作
- C++模板
- LUA Glider,最好的LUA IDE,没有之一
- spring jar包详解
- [Lua]Lua语言基础汇总(1) -- 类型与值