gpt4 book ai didi

c++11 - 为什么隐式转换发生在 "if expression"虽然它应该是显式转换

转载 作者:行者123 更新时间:2023-12-03 07:55:31 26 4
gpt4 key购买 nike

这段代码不应该编译,为什么会编译呢?
if 表达式中上下文的原则是什么?

class B {  
public:
B() {}
explicit operator bool () {}
};



int main (){
B Bp;
//bool check = Bp // error
if (Bp){ //o.k
return 1;
}
return 0;
}

谢谢

最佳答案

该代码非常应该编译。该标准花费了大量精力来确保它确实如此。

表达式在很多地方“上下文转换为 bool” 在这些地方,explicit如果它们可用,将调用 bool 转换。这些上下文转换之一是 if表达,就像你的情况。

此语言允许 explicit operator bool仍用于条件检查的类型 if(expr) ,但是如果没有显式转换,你就不能做其他事情。你不能把它传递给一个接受 bool 的函数。 ;你不能从返回 bool 的函数中返回它,等等。

所有上下文转换都是语言特性中的显式表达式。所以explicit operator bool保护您免受隐式用户定义的转换,同时仍然允许语言定义的转换发生。

关于c++11 - 为什么隐式转换发生在 "if expression"虽然它应该是显式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18303568/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com