先来段C语言的
one.c
#include <stdio.h>
int main()
{
int max = 12;
int min = 17;
(a < b ? a : b) = 20;
}
gcc one.c
error: lvalue required as left operand of assignment
来自C++的关爱
one.cpp
#include <iostream>
using std::cout;
using std::endl;
int main()
{
int max = 12;
int min = 17;
(a < b ? a : b) = 20;
cout << a << endl;
return 0;
}
g++ -std=c++0x one.cpp
运行结果 20
分析:
C++编译器在进行三目运算符的时候进行了取地址操作,反回了比较结果的地址(a的地址)
: *(a < b ? &a : &b) = 20;