c++随笔测试(Corner of cpp)
2024-09-08 06:55:05
- 在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)。
所以此程序的输出是未知的,取决于平台的实现。
最新文章
- 从头开始db-oracle
- 【转】nginx优化 突破十万并发
- POJ1011
- Gitlab. Disable user creation on welcome page
- PHP学习之路 (2)
- 【Permutations II】cpp
- C语言中不同类型的循环(Different types of loops in C)
- js获取浏览器窗口的大小
- C# DataTable 转换成JSON数据
- Python之路【第六篇】:Python迭代器、生成器、面向过程编程
- 修改rpm中的文件重新打包
- springboot 使用 redis
- 一个简单的定向python爬虫爬取指定页面的jpg图片
- 厉害了,Spring Cloud for Alibaba 来了!
- Struts2中文件上传下载实例
- 在IDEA中实战Git-branch
- PHP通过PDFParser解析PDF文件
- 如何判断 ios设备的类型(iphone,ipod,ipad)
- [Javascript] Function Expression Ex, Changing Declarations to Expressions
- 【php】基础学习2