【发布时间】:2011-09-30 06:33:22
【问题描述】:
我在使用条件运算符时遇到了一个奇怪的编译错误。
a,b 是int 的值,下面的表达式会出现编译错误。
(a>b)?( std::cout << a ) : ( b=MAX );
16 (b <unknown operator> 5)'
(a>b)?( a=MAX ) : ( std::cout<<b );
16 (&std::cout)->std::basic_ostream<_CharT, _Traits>::operator<< [with _CharT = char, _Traits = std::char_traits<char>](b)'
但是这个表达式效果很好,这很奇怪..
(a>b)?( std::cout << a ) : ( std::cout<<b );
我不知道是什么造成了这种差异,也不知道为什么编译错误代表什么。这是我的 gcc 信息:
Reading specs from ./../lib/gcc/mingw32/3.4.2/specs
Configured with: ../gcc/configure --with-gcc --with-gnu-ld --with-gnu-as --host=
mingw32 --target=mingw32 --prefix=/mingw --enable-threads --disable-nls --enable
-languages=c,c++,f77,ada,objc,java --disable-win32-registry --disable-shared --e
nable-sjlj-exceptions --enable-libgcj --disable-java-awt --without-x --enable-ja
va-gc=boehm --disable-libgcj-debug --enable-interpreter --enable-hash-synchroniz
ation --enable-libstdcxx-debug
Thread model: win32
gcc version 3.4.2 (mingw-special)`
【问题讨论】:
-
将带有副作用的语句放在条件表达式中看起来很丑。为什么不使用传统的 if 语句?
-
@Johannes:我已将您的评论标记为不具建设性。为什么不发表评论来解释为什么您如此不喜欢这个问题,而不是简单地粗鲁?
-
@Brennan 我认为提问者非常清楚这一点。我试图通过编辑它来修复它,但它是不可理解的。我从未见过像函数一样调用 16,也从未见过在 C++ 中使用
(这也不是 GCC 诊断)。如果你的问题格式不正确,在 SE 上呆了一年多,你至少需要以一种允许其他人格式化的格式来说明它。这就是为什么我-1'ed。我删除了我的其他评论,因为我发现它实际上没有帮助。
标签: c++ gcc conditional-operator