微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

非平凡的右值和左值示例

如何解决非平凡的右值和左值示例

我不确定一些右值/左值非临时性示例。

在左值或右值下方的std::vector<int>({1,2,3})[0]std::vector<int>()表达式是什么?

代码没有实际用法,但令我惊讶的是该代码有效。看起来它们都是左值。还是不?

#include <vector>

int main()
{
    std::vector<int>({1,3})[0] = 0;
    std::vector<int>() = {1,3}; 
    return 0;
}

更多示例...

下面的std::vector<int>()表达式是一个右值。对? 以及表达式std::vector<int>({1,3})[0]呢?
来自std::vector<int>()的向量对象和来自...[0]的int值都是临时值。对吧?

auto v = std::vector<int>();
int i = std::vector<int>({1,3})[0];

解决方法

%>%是一个右值,因为语法std::vector<int>()总是产生一个右值。允许使用type()是因为通常允许分配给类类型的右值,但是可以通过使用& qualifier定义std::vector<int>() = {1,2,3};来禁止特定类的使用,operator=不能这样做。做。

std::vector是左值,因为std::vector<...>::operator[]被定义为返回左值引用。可以根据返回值是左值还是左值来定义它返回右值或左值(请参见上面的链接),但是std::vector<int>({1,3})[0]不会这样做。

来自std :: vector()的矢量对象和来自... [0]的int值是临时值。对吧?

std::vector-是的。 vector-不,至少是正式的。

某个对象是否为临时对象仅取决于其创建方式,例如int总是会给您一个临时的机会。

向量在堆上分配其元素,这将导致正常的非临时对象。向量本身是临时的都没关系。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。