【发布时间】:2017-07-12 17:11:50
【问题描述】:
三元运算是否返回副本或引用?
我检查了以下代码
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
【问题讨论】:
-
你问的不是类型,而是值类别!
-
什么是价值类别?
-
v是一个引用 - 一个对v0的引用,所以v0是您通过该引用清除的内容。
标签: c++ ternary-operator