【发布时间】:2016-11-29 16:20:28
【问题描述】:
我很感兴趣,无论标准在将 bool 类型转换为 integer 类型后对它的可能值进行了说明。
例如以下代码:
#include <iostream>
using namespace std;
int main() {
bool someValue=false;
*((int*)(&someValue)) = 50;
cout << someValue << endl;
return 0;
}
即使它被强制存储值 50 也会打印 1。标准是否指定了任何关于它的内容?或者编译器是否为 bool 类型生成一些方法:
operator int(){
return myValue !=0 ? 1 : 0;
}
还有为什么会像下面这样投射:
reinterpret_cast<int>(someValue) = 50;
错误禁止
错误:从类型“bool”到类型“int”的无效转换
(以上我使用 GCC 5.1 编译器。)
【问题讨论】:
-
AFAIK 您的代码显示 UB,因为它违反了严格的别名规则。
-
在写入
someValue时,您正在跨越bool的内存要求 -
你为什么要尝试做这些事情?
-
此代码不是将
bool转换为int。那将是(int)someValue。 -
所以改变你的标题。