三元运算的结果(类型)是什么?

use*_*020 7 c++ ternary-operator

三元操作是否返回副本或引用?

我检查了以下代码

vector<int> v0 = { 1, 2 };
vector<int> v1 = { 3 };

vector<int>& v = true ? v0 : v1;
v.clear(); // v0 will be cleared also
Run Code Online (Sandbox Code Playgroud)

我认为三元操作会返回一份副本v0.然后把它传递给v.因此v,v0具有不同的数据存储.测试没有显示出来.

谢谢,Kerrek SB!我添加了一个"应该不编译"的例子(感谢WhiZTiM!)来说明这一点.

vector<int>& v = true ? v0 : vector<int>{3};
v.clear(); // v0 will not be cleared
Run Code Online (Sandbox Code Playgroud)

Ker*_* SB 15

类型的条件表达式的是操作数的常见的类型.

但我认为你实际上并不感兴趣.重要的是条件表达式的值类别.

如果两个操作数都是或者可以转换为公共类型的左值,则条件表达式是左值; 否则它是一个rvalue(可能需要对其中一个操作数进行左值到右值的转换).