c++ - 在 c/c++ 中添加两个 bool 值

标签 c++

我试着把 bool 值加在一起,说:

bool i = 0, j = 0, k = 0;
cout << sizeof(i + j + k) << endl;

结果为 4,这意味着结果被转换为 'int' 值。

我想问:这是C/C++的标准操作吗?编译器是否总是保证在溢出时将临时值转换为更大的类型?谢谢!

感谢您的回答,一个跟进问题: 说,如果我这样做: unsigned short i = 65535, j = 65535; cout << sizeof(i + j) << endl; 结果是4。为什么它被提升为'int'?

最佳答案

导致转换的不是溢出,而是你做算术的事实。在 C++(以及行为起源的 C)中,内置类型的基本算术运算符的操作数在进行计算之前经过一组定义明确的提升。这些规则中最基本的(有些简化)是任何小于 int 的类型都会被提升为 int

你的后续问题有相同的答案 - 你的 shortint 小,所以它在添加之前被提升为 int发生。

This StackOverflow question有几个答案更详细地描述了促销事件。

关于c++ - 在 c/c++ 中添加两个 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17179287/

相关文章:

c++ - QML TreeView 在向模型添加新数据后未在运行时更新

C++ - 加载数据文件失败!

c++ - 指向成员变量的多态指针

c++ - 以不同的方式获取命令行输入

c++ - Lambda(通过引用与按值将 lambda 传递给函数)

c++ - 使用 OpenCV/C++ 设置树莓相机模式

c++ - 在 C++ 中将十六进制 IP 转换为十进制 IP

c++ - mingw32的Qt编译错误

C++ 线程安全总结

c++ - 如何使用模板解码将来自 YAML::Node 的字符串存储在类中