三目运算符:

三目运算符即可作为**右值使用,又可作为左值**使用。

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int a=100;
  6. int b=200;
  7. (a<b?a:b)=666;
  8. cout<<"a的值为:"<<a<<endl; //a=666
  9. cout<<"b的值为:"<<b<<endl; //b=200;
  10. return 0;
  11. }

运行结果:
a的值为:666
b的值为:200

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int a=100;
  6. int b=200;
  7. (a<b?3:b)=777; //error: lvalue required as left operand of assignment
  8. cout<<"a的值为:"<<a<<endl;
  9. cout<<"b的值为:"<<b<<endl;
  10. return 0;
  11. }

运行结果:
error: lvalue required as left operand of assignment

结论1:
三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用
意义:如果三目运算符的返回都是变量的时候,返回的是变量的本身

引用:

变量名的本质是存储空间的别名;
引用:已经定义了的变量的别名。
引用的语法:Type& name = var;
引用在定义时,必须初始化,且类型必须一致,初始化的值必须是变量,而非常量。

int a=100;
int& b=a;
b=666;
注意:普通引用在定义时必须用相同类型的变量进行初始化。

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int a=100;
  6. int& b=a;
  7. b=666;
  8. cout<<"a的值为:"<<a<<endl;
  9. cout<<"b的值为:"<<b<<endl;
  10. return 0;
  11. }

运行结果:
a的值为:666
b的值为:666

三目运算符的可能返回都是变量时,返回的是引用