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

Posted

技术标签:

【中文标题】C ++中的运算符逗号?:条件【英文标题】:Operator comma in C++ ?: conditional 【发布时间】:2013-07-20 10:04:31 【问题描述】:

你能告诉我有什么问题吗?:操作员告诉错误:

 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;

【问题讨论】:

我认为, 不是运算符,int A=(6,B=8); 行不正确 @ABFORCE 是运算符。 @hvd:会不会超载? @ABFORCE:不幸的是,是的...... ? 操作符的问题是人们用它来编写类似上面的代码。 【参考方案1】:

条件运算符的两个操作数的类型需要相同。

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

c = 100, B=100, cout &lt;&lt; "!!!"的类型是cout &lt;&lt; "!!!"的类型,也就是std::ostream

A = 100 的类型是int

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

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

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

Live example here.

【讨论】:

@thomas 这也是一个解决方案。由于 OP 似乎想要混淆代码,我不知道他会喜欢哪一个 ;) 你可以用这个代码代替,效果很好: if (A 【参考方案2】:

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

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

【讨论】:

【参考方案3】:

由于没有使用返回值,因此将两边都强制转换为 void 可能更清楚。 虽然不如使用一个很好的旧“如果”那么清楚。

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于C ++中的运算符逗号?:条件的主要内容,如果未能解决你的问题,请参考以下文章

语言C#,winform,数据库为access. 如何把int数组作为sql语句中的查询条件?

c语言中的语句有哪几类?C语句与其他语言中的语句都有哪些异同?

C语言中奇妙又有趣的符号——运算符(操作符)!C语言运算(操作)符最全集合(建议收藏)

c语言位运算问题?

如何在C语言中通过查看行中的一个属性对文件的行进行排序?

C语言中逗号表达式的实用意义或者产生的原因?