c++测试代码怎么写(c++随笔测试(Corner of cpp))
导读:在c++17下,程序的输出是什么?(有可能编译出错,有可能输出未知,有可能是未定义行为) 点击查看代码 #include<iostream>...
在c++17下 ,程序的输出是什么?(有可能编译出错 ,有可能输出未知,有可能是未定义行为)
点击查看代码
#include<iostream>
void foo(unsigned int) {std::cout<<"uint";}
void foo(int) {std::cout<<"int";}
void foo(char) {std::cout<<"char";}
int main(){
char a=1;
char b=2;
foo(a+b);
return 0;
}
答案
输出未知 ,根据不同实现会有不同结果
char类型在c++中 ,根据不同平台会拥有不同的符号属性和表示范围 。
从c++11开始 ,char的符号属性将依据编译器和目标平台 。ARM和PowerPC默认是无符号 ,
而x86和x64默认是有符号的。同时char的位数则是根据宏CHAR_BIT(在c头文件climits中) 。
c++的基本二元运算符在进行运算时会进行一些类型转换 ,对于整数来说 ,它们都需要进行整型提
升 。
简略来说为:在计算式 ,首先会把各个数提升到int ,如果int无法表示 ,那就升到unsigned int 。
以题目为例,正常来说int足够表示char的所有值 ,所以一般调用foo(int) ,但是在特定平台下,
比如16位计算机同时设定char为无符号 ,这时int无法表示char ,所以会提升到unsigned int,
调用foo(unsigned int) 。
所以此程序的输出是未知的 ,取决于平台的实现 。
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!