[英]Assigning bool value to address of variable
我正在玩弄 c++17 中的引用、指针和值。 在研究该主题时,我遇到了这个事件,但我不明白它是如何运作的。
bool fact = true;
bool *ptr = &fact;
std::cout << ptr;
按预期打印事实的地址。
如果我尝试将fact的地址分配给常规 bool 类型而不是指针,它会在控制台上打印1 :
bool fact = true;
bool ptr = &fact;
我的问题是为什么我没有收到编译器错误? 变量的地址不是总是应该通过指针传递吗? 我可以在字符串类型中分配变量的地址吗?
对不同类型进行相同的测试会导致编译错误(如预期的那样),例如:
int num = 10;
int ptr = #
在 C++ 中,当需要bool
时,指针被隐式转换为bool
。
这主要是为了允许这段代码:
int *p = &my_param;
if (p != nullptr) {
...
}
简化为:
int *p = &my_param;
if (p) {
...
}
但是你的变量ptr
是bool
并且你正在用一个指针初始化它,所以 C++ 转换它因为它看到一个bool
是必需的。
从示例中可以看出,转换规则在pointer == nullptr
时为false
,在pointer != nullptr
时为true
。
你在输出中得到1
的原因是cout
不知道如何打印布尔值,它只是将它们打印为int
s。
C++ 指针在转换为int
时不如转换为bool
时有用,因此没有隐式int
转换,这就是为什么使用int
而不是bool
时会出现编译错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.