C++编译时的类型推导
来源:互联网 发布:get it beauty2015 编辑:程序博客网 时间:2024/06/09 18:45
首先明确一点,VisualStudio实现的C++的类型推导是在编译时进行的。
如下代码:
#include <iostream>using namespace std;int main() { int a = 10000;char c = 'a';cout << ((2 > 1) ? a : c) << endl;cout << ((2 > 3) ? a : c) << endl;return 0;}下面是VS2010的输出:
如果在运行时可以自动推断的话,那么第二行的输出就应该是'a'。所以得出结论,VisualStudio的C++的实现中,类型推导是在编译时进行的。
问题来了,今天忽然发现,可能在编译期间存在两套推导系统。
代码如下:
#include <iostream>using namespace std;int main() { char c = 'a';c = c + 256;c = c + 255;cout << c + 1 << endl;return 0;}将警告等级调制LV4,会报警告“warning C4244: “=”: 从“int”转换到“char”,可能丢失数据”。
但令人奇怪的是,警告的行是c = c + 256的那行,而下一行c = c + 255并没有报警告(对两行赋值语句单独测试时一样如此)。
说明类型推导时,将(c+256)视作int型变量,而将(c+255)视作char型变量。
但在cout时,却将(c+1)视作整型变量来输出。令人费解。
所以,这里有疑问,到底在类型推导时,将(c+255)这个表达式视作何种类型了呢?
0 0
- C++编译时的类型推导
- [c++]模板的类型推导--数组
- larva的类型推导
- VC的类型推导问题
- 论python的类型推导
- Modern C++(一)auto自动类型推导
- 编译时推导函数调用约定、常量性、返回值、参数等函数类型特征
- 《Effective Modern C++》翻译--条款4:了解如何查看推导出的类型
- item 1: 对于模板类型的推导
- item 2:理解auto类型的推导
- 编译原理的归约和推导
- 《Effective Modern C++》翻译--条款1: 理解模板类型推导
- [C++]高效使用c++11--理解auto类型推导
- 《effective modern c++》笔记之c++类型推导(1)
- Item 6: 当auto推导出一个不想要的类型时,使用显式类型初始化的语法
- ·编译c时出现数组元素的类型不完全错误
- 16种C语言编译警告(Warning)类型的解决方法
- 静态类型推导
- ffmpeg入门(四) 解码部分代码整理
- 内存溢出和内存泄漏的区别
- hdu 1021 Fibonacci Again
- razor关键字+.NET MVC
- Android下常见的内存泄露 经典
- C++编译时的类型推导
- 安装kali linux后遇到的问题解决方案
- 减少运行时间耗费的技巧
- linux内核数据结构之kfifo
- CF341A
- ssh面密码登陆
- JAVA中List、Map、Set的区别与选用
- 极客标签 | 在线编程知识分享学习平台
- 设计模式之模板方法模式