gpt4 book ai didi

c++ - 隐式类型转换 - 编译器错误

转载 作者:太空狗 更新时间:2023-10-29 23:37:55 24 4
gpt4 key购买 nike

这个问题与this有关问题。以下代码可以很好地编译 VC9 编译器,但在使用 Comeau 在线编译时会出错。谁能告诉我哪个是正确的,错误的含义是什么?

error: ambiguous "?" operation: second operand of type "TypesafeBool" can be converted to third operand type "bool", and vice versa TypesafeBool b = (1==1) ? f() : false;

class TypesafeBool
{
private:
bool m_bValue;
struct Bool_ {
int m_nValue;
};
typedef int Bool_::* bool_;
inline bool_ True() const { return &Bool_::m_nValue; }
inline bool_ False() const { return 0; }

public:
TypesafeBool( const bool bValue ) : m_bValue( bValue ){}
operator bool_() const { return m_bValue ? True() : False(); }
};

TypesafeBool f()
{
return TypesafeBool(true);
}

int main()
{
TypesafeBool b = (1==1) ? f() : false;
}

最佳答案

错误是三元运算符必须有单一类型,而你的表达式 (1=1) ? f() : false 有两种类型——f() 有类型 TypesafeBoolfalse 有类型 bool。您可以在它们之间进行转换,但 Comeau 不知道您要使用哪个。要解决它,请将三元组的一侧转换为另一侧的类型:(1=1) ? f() : TypesafeBool(false).

Comeau 在这里是正确的,因为对于观察者来说结果应该采用什么类型是显而易见的,三元表达式需要有自己的单一类型,而不引用它在什么地方使用,它应该选择的类型是模棱两可。

关于c++ - 隐式类型转换 - 编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3529674/

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