C++处理类型
来源:互联网 发布:excel编程用什么语言 编辑:程序博客网 时间:2024/06/03 13:25
编程时常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚地知道表达式的类型。然而要做到这一点并非那么容易,有时甚至做不到。其实有两个C++类型说明符可以帮助解决该问题:auto和decltype。
auto可以让编译器通过初始值来推断出变量的类型,所以使用auto声明的变量就必须要初始化。话不多说,上代码:
int i = 10;int &r = i;cout<<i<<'\t'<<r<<endl;auto t = r;t=20;cout<<i<<'\t'<<r<<'\t'<<t<<endl;auto &temp = t;cout<<"&r="<<&r<<'\t'<<"&t="<<&t<<'\t'<<"&temp="<<&temp<<endl;
首先定义一个int型变量i,初始化值为10,然后定义了i的引用r。看看i和r的输出,没问题,都是10.
接着使用auto定义了t这个变量,初始化为r。我们知道r是一个引用,那看看t是个什么类型的变量。其实auto t = r;这行代码能够通过编译就可以知道,t肯定不是一个引用,因为本身r是一个引用,不可能定义一个引用的引用,那t肯定是和i同一类型。不过为了验证一下,我们让给t重新赋值,然后输出i,r,t,发现i和r值没有变化,只有t变了,说明推断是正确的。不过按照auto的使用方法来说,t应该和r是同一类型。但是,这里需要注意的是:使用引用其实是使用引用的对象,特别是当引用被用作初始值时,真正参与初始化的其实是引用对象的值。此时编译器就以引用对象的类型作为auto的类型。
我们继续往下走,auto t = r;
这个语句定义了一个t类型的引用,也就是int型的引用temp,然后我们输出r,t,temp的地址来观察,到底这三个是个什么样的关系:可以发现,t和temp是一样的地址,也就是temp是t的引用,而和r已经没有了任何关联。
使用auto时需要注意的除了引用这,还有顶层const和底层const的问题:一般auto会忽略掉顶层const,而保留底层const。所谓顶层const,就是经const修饰后变量保持不变的,而底层const,一般是修饰指针对象,经修饰之后该指针必须指向对应类型的常量,即指向常量的指针。
- c++(13)处理类型--类型别名
- c语言处理变参数变类型
- C#-链接sqlite3,处理datetime类型字段
- c++primer读书笔记:2.5 类型处理
- c++primer笔记--2.5处理类型
- c++primer学习笔记-----2.5处理类型
- C/C++类型转换和异常处理
- c++(14)处理类型--auto类型说明符
- c++(15)处理类型--decltype类型指示符
- C++处理const类型变量与C的不同
- C++Primer(第二章2.5总计 处理类型)
- 《C++Primer》笔记 第二章2.5处理类型
- Rust与C交互(FFI)中复杂类型的处理
- 类型 处理
- 处理类型
- 处理类型
- C 使用 int 类型来处理字符常量,而不是 char 类型
- C++/clr 本地自定义类型和托管自定义类型的相互转换 【MSDN如何:扩展封送处理库】
- java.sql.SQLException: ORA-01810: 格式代码出现两次
- VS2008升级到2013中cocos2dx出现的一些小问题
- Linux中的makefile文件
- Lexicographic permutations
- 前端神器Sublime Text 3的下载与安装
- C++处理类型
- 远程部署Maven web项目到web服务器
- IFTTT实现新浪微博完美同步Twitter
- 枚举+dijkstra(最短路删点) hdu5137How Many Maos Does the Guanxi Worth
- JeeSite(2):导入数据,进入系统
- 抽象类与接口的区别
- python获取ipv6地址
- 使用 Flume 部署和管理可扩展的 Web 服务
- Qt 5.6 的 Qt.labs.controls 在安卓上效果