iam*_*ind 9 c++ compiler-errors conditional-operator typecasting-operator
以下代码是最简单的形式:
struct X {
operator char () const { return 'a'; }
};
int main ()
{
X obj, *p = &obj;
char a = *p; // ok
char c = (true)? *p : 'z';
}
Run Code Online (Sandbox Code Playgroud)
此代码给出了编译器错误,
错误:操作数为?:具有不同类型的'X'和'char'
当类型转换操作符没有歧义时,为什么*p不解决?这样的虚假错误消息是正确的还是g ++错误?charclass X
[ 更新注意:有趣的是这种情况不会产生这样的错误 ]
它似乎是一个编译器错误.我在规范中检查过,标准清楚地说(§5.16/ 3 - C++ 03),
否则,如果第二个和第三个操作数具有不同的类型,并且具有(可能是cv-qualified)类类型,则尝试将每个操作数转换为另一个操作数的类型.
本节的其余部分解释了转换是如何完成的.使用用户定义的转换运算符,*p无法通过隐式转换为char类型来阻止任何操作.
另外,我编译了它(GCC) 4.5.0.它没有错误,也有-pedantic选项.尝试过-std=c++98和-std=c++0x.仍然没有错误.
最明确的是,它是一个编译器错误.
| 归档时间: |
|
| 查看次数: |
1293 次 |
| 最近记录: |