Lvalue需要错误

dco*_*r11 1 c ternary-operator lvalue

visual studio不报告此程序的任何错误,而turbo c/c ++表示'函数main中需要左值'

int main()
{
  int a=10,b; 
  a>=5?b=100:b=200;
  printf("%d",b);
  return 0;

}
Run Code Online (Sandbox Code Playgroud)

避免错误:a> = 5?b = 100:(b = 200);

为什么会这样?说明.

Ker*_* SB 5

在C++中,三元条件运算符将赋值表达式作为其第三个操作数,因此您的表达式被理解为:

(a >= 5 ? b = 100 : b) = 200;
Run Code Online (Sandbox Code Playgroud)

在"真实"的情况下,这相当于:

b = 100 = 200;
Run Code Online (Sandbox Code Playgroud)

这又从右到左分组,即:

b = (100 = 200);
Run Code Online (Sandbox Code Playgroud)

这显然没有意义.


你的意思是:

if (a >= 5) { b = 100; } else { b = 200; }
Run Code Online (Sandbox Code Playgroud)

你不需要表达; 声明完全没问题.另外,正如Michelle建议的那样:

int b = a >= 5 ? 100 : 200;
Run Code Online (Sandbox Code Playgroud)

请注意,三元条件运算符在C中是不同的,尽管它看起来很相似!