C ++中的运算符逗号?:有条件的

时间:2013-07-20 10:04:32

标签: c++ visual-studio comma

你能告诉我它的问题是什么?:运算符告诉我错误:

 C2446: ':' : no conversion from 'int' to 'std::basic_ostream<_Elem,_Traits>'   
           c:\documents\visual studio 2005\projects\8.14\8.14\8.14.cpp  36

守则:

int _tmain(int argc, _TCHAR* argv[])
{
int B;
int A=(6,B=8);
bool c = true;
cout << endl << B;
while (B != 100)
{
cout << "qgkdf\n";
(A<B) ? (c = 100, B=100, cout << "!!!") : (A = 100);
A--;
}
_getch();
return 0;
}

4 个答案:

答案 0 :(得分:3)

条件运算符的2个操作数的类型必须相同。

(A<B) ? (c = 100, B=100, cout << "!!!") : (A = 100);

c = 100, B=100, cout << "!!!"的类型是cout << "!!!"的类型,即std::ostream

A = 100的类型为int

这两种类型不匹配,因此错误。

编辑:逗号运算符返回最后一部分的值。你可以添加一个int,例如:

(A<B) ? (c = 100, B=100, (cout << "!!!"), 42) : (A = 100);
//                                      ^^^^

Live example here

答案 1 :(得分:2)

如果您要编写混淆代码,请确保您知道如何使用强制转换,因为解决方案显然是将cout << "!!!"的结果转换为int

(A<B) ? (c = 100, B=100, reinterpret_cast<int>(cout << "!!!")) : (A = 100);

答案 2 :(得分:1)

由于未使用返回值,因此将双方置于无效状态可能更为清楚 虽然不像使用好的旧“if”那样清晰。

答案 3 :(得分:1)

这是对?:运营商的公然滥用。使用if语句。这就是他们的目的。