加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 04:54:24 所属栏目:百科 来源:网络整理
导读:三元操作是否返回副本或引用? 我检查了以下代码 vectorint v0 = { 1,2 };vectorint v1 = { 3 };vectorint v = true ? v0 : v1;v.clear(); // v0 will be cleared also 我认为三元操作返回v0的副本.然后将其传递给v.因此v和v0具有不同的数据存储.测试没有显
三元操作是否返回副本或引用?

我检查了以下代码

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(可能需要对其中一个操作数进行左值到右值的转换).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读