繁体   English   中英

将布尔值分配给变量的地址

[英]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 = &num;

在 C++ 中,当需要bool时,指针被隐式转换bool

这主要是为了允许这段代码:

int *p = &my_param;
if (p != nullptr) {
    ...
}

简化为:

int *p = &my_param;
if (p) {
    ...
}

但是你的变量ptrbool并且你正在用一个指针初始化它,所以 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM