C++对三目运算符进行了升级,下面的代码正确吗?
int a = 1;
int b = 2;
(a < b ? a : b) = 3;
printf("a = %d, b =%d \n", a, b);
三目运算符返回值
C语言中的三目运算符返回的是变量值
- 不能作为左值使用
C++中的三目运算符可直接返回变量变身
- 既可作为右值使用,又可作为左值使用
在C++中,三目运算符可能返回的值中如果有一个常量值,则不能作为左值使用。
三目运算符示例
我们对上面的代码分别用gcc和g++编译器来编译。
deepinout.com.c
#include <stdio.h>
int main()
{
int a = 1;
int b = 2;
(a < b ? a : b) = 3;
printf("a = %d, b =%d \n", a, b);
return 0;
}
编译会发生错误:
deepinout.com.cpp
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = 1;
int b = 2;
(a < b ? a : b) = 3;
printf("a = %d, b =%d \n", a, b);
return 0;
}
g++编译器能正常编译,得到正确的结果: