Daw*_*dPi 1 c++ casting boolean
我感兴趣的是,标准是否会bool在将类型转换为integer类型后对类型类型的可能值进行说明。
例如下面的代码:
#include <iostream>
using namespace std;
int main() {
bool someValue=false;
*((int*)(&someValue)) = 50;
cout << someValue << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
打印 1,即使它被迫存储值 50。标准是否指定了任何相关内容?或者编译器是否为 bool 类型生成某种方法,如下所示:
operator int(){
return myValue !=0 ? 1 : 0;
}
Run Code Online (Sandbox Code Playgroud)
另外为什么铸造如下:
reinterpret_cast<int>(someValue) = 50;
Run Code Online (Sandbox Code Playgroud)
因错误而被禁止
错误:从类型“bool”到类型“int”的转换无效
(对于以上所有内容,我使用 GCC 5.1 编译器。)
您使用它的方式表现出了 UB,因为您在 bool 变量的边界之外编写并且违反了严格的别名规则。
但是,如果您有一个 bool 并希望将其用作 int (这通常发生在您想要基于某些条件对数组进行索引时),则标准要求 bool 转换true为1,falsebool 转换为0,无论什么(UB显然被排除在外)。
例如,保证输出52只要should_add == true。
int main(){
int arr[] = {0, 10};
bool should_add = 123;
int result = 42 + arr[should_add];
std::cout << result << '\n';
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7087 次 |
| 最近记录: |