首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nullptr - bool分配

Nullptr - bool分配
EN

Stack Overflow用户
提问于 2020-12-21 22:55:07
回答 1查看 156关注 0票数 2

为什么我们不能直接将nullptr分配给bool对象?例如,标志对象的赋值会导致错误。Visual编译器给出了这样的结论:"C++类型的值不能分配给类型的实体“。

代码语言:javascript
复制
int main(){

    int x = 10;
    int *ptr = &x;
    bool flag = ptr;
    
    flag = nullptr; 

}

但是下面的版本很好。

代码语言:javascript
复制
int main(){

    int x = 10;
    int *ptr = &x;
    bool flag = ptr;
    ptr = nullptr;
    
    flag = ptr;

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-21 22:57:37

有点棘手。我们必须仔细检查C++标准。首先,“标准转换”规定:

  • 所有指针都有隐式转换为布尔(perconv.bool)

这种转换只是将空指针转换为false。因此,我们应该能够直接将空指针常量赋值给布尔值,对吗?

嗯,算是吧。

请参阅,nullptr的实际定义表明它是std::nullptr_t的一个实例,这是一个不同的类型,实际上不是指针类型。但是,它可以转换为指针类型!(按lex.nullptr计算)

看起来应该是可能的,对吧?nullptr是可转换为指针类型的,而指针类型是可转换为布尔值的。

但是,标准转换(返回到conv)序列只能按特定顺序应用转换。此顺序只允许一个布尔值或指针转换。

因此,我们所需要的两个转换不会隐式发生。我们必须为编译器显式地执行其中之一。例如:

代码语言:javascript
复制
flag = static_cast<int*>(nullptr);

或者,也许更简单

代码语言:javascript
复制
flag = bool{nullptr}

或者更简单:

代码语言:javascript
复制
flag = {nullptr}

但在这一点上,您最好只使用false :-)

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65401067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档