三元操作是否返回副本或引用?
我检查了以下代码
vector<int> v0 = { 1,2 }; vector<int> v1 = { 3 }; vector<int>& v = true ? v0 : v1; v.clear(); // v0 will be cleared also
我认为三元操作返回v0的副本.然后将其传递给v.因此v和v0具有不同的数据存储.测试没有显示出来.
谢谢,Kerrek SB!我添加了一个“不应该编译”的例子(感谢WhiZTiM!)来表明这一点.
vector<int>& v = true ? v0 : vector<int>{3}; v.clear(); // v0 will not be cleared
解决方法
条件表达式的类型是操作数的常见类型.
但我认为你实际上并不感兴趣.重要的是条件表达式的值类别.
如果两个操作数都是或者可以转换为公共类型的左值,则条件表达式是左值;否则它是一个rvalue(可能需要对其中一个操作数进行左值到右值的转换).