首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们能取xvalue的地址吗?

我们能取xvalue的地址吗?
EN

Stack Overflow用户
提问于 2022-05-05 13:00:56
回答 1查看 96关注 0票数 2

据我所知,自C++11以来出现了一些概念: lvalue、rvalue、prvalue、xvalue等。

据我理解,如果一个函数返回一个局部变量,它应该是一个rvalue。

代码语言:javascript
复制
std::string func() { return std::string("abc"); }
auto ret = func(); // func returns a rvalue

对于x值,std::move(x)是一种x值。

我想我是对的。

今天,我的同事告诉我,我们不能获得rvalue的地址,所以&func()是非法的,但是我们可以获得xvalue的地址。这是区分r值和x值的一种方法.

我刚试过了:int a = 1; std::cout << &std::move(a);。但是编译器说:

代码语言:javascript
复制
error: taking address of xvalue (rvalue reference)

我的同事是错的吗?

更新

事实上,我的同事误解了“有身份”的含义和一元的&运算符,我被他搞糊涂了。

这里有一个关于这个问题的非常好的问题:"xvalue有身份“是什么意思?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-05 13:04:58

你的同事不对。C++总是需要一个lvalue才能与操作符的地址一起使用。这是在[expr.unary.op]/3中显式调用的。

一元&运算符的操作数应为某种类型T的值。结果是一个prvalue。

如果标准使用的是glvalue而不是lvalue,那么它们是正确的,但是[fig:basic.lval]lvaluexvalueglvalue的不同叶子,所以xvalue是不允许的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72127603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档