问题标签 [rvalue]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
6987 浏览

c++ - 如果一个函数返回一个 int,可以给它分配一个 int 吗?

如果一个函数返回一个int,它可以通过一个int值来赋值吗?我认为为函数赋值没有太大意义。

我注意到,如果函数返回对 int 的引用,那就没问题了。它仅限于int吗?其他类型呢?或任何其他规则?

0 投票
6 回答
3594 浏览

c++ - 右值结构的成员是右值还是左值?

返回结构的函数调用是一个右值表达式,但它的成员呢?
这段代码在我的 g++ 编译器中运行良好,但 gcc 给出错误提示“需要左值作为赋值的左操作数”:

gcc 将fun().v其视为右值,我可以理解这一点。
但是 g++ 并不认为赋值表达式是错误的。这是否意味着 fun1().v 在 C++ 中是左值?
现在的问题是,我搜索了 C++98/03 标准,没有发现任何关于fun().v是左值还是右值的信息。
那么,它是什么?

0 投票
7 回答
34089 浏览

c++ - 获取临时对象的地址

§5.3.1 一元运算符,第 3 节

一元 & 运算符的结果是指向其操作数的指针。操作数应为左值或限定 ID。

在这种情况下,“应该”到底是什么意思?这是否意味着获取临时地址是错误的?我只是想知道,因为 g++ 只给了我一个警告,而 comeau 拒绝编译以下程序:

g++警告taking address of temporary

喜剧错误expression must be an lvalue or a function designator

请问有人有微软编译器或其他编译器并且可以测试这个程序吗?

0 投票
3 回答
8591 浏览

c++ - POD、非 POD、右值和左值

谁能解释一下右值、左值、POD 和非 POD 的细节,为什么下面标记的第一个表达式正确而下面标记的第二个表达式可以?据我了解,int() 和 A() 都应该是右值,不是吗?

0 投票
5 回答
1089 浏览

c++ - C++ 中的引用初始化

谁能向我解释为什么这两个陈述之间存在差异?

A&它说从临时类型的类型的非常量引用的无效初始化A

为什么在const这里很重要?

0 投票
5 回答
734 浏览

c++ - 为什么允许 T() = T()?

我相信表达式T()会创建一个右值(按标准)。但是,以下代码可以编译(至少在 gcc4.0 上):

我知道从技术上讲这是可能的,因为可以在临时对象上调用成员函数,而上面只是在从 first 创建的 rvalue 临时对象上调用 operator= T()

但从概念上讲,这就像为右值分配一个新值。允许这样做有充分的理由吗?

编辑:我觉得这很奇怪的原因是它严格禁止内置类型但允许用户定义类型。例如,int(2) = int(3)不会编译,因为那是“赋值中的无效左值”。

所以我想真正的问题是,这种在语言中内置的有点不一致的行为是有原因的吗?还是出于某种历史原因?(例如,仅允许在右值表达式上调用 const 成员函数在概念上会更合理,但不能这样做,因为这可能会破坏一些现有代码。)

0 投票
4 回答
419 浏览

c++ - 模板中的 C++ 右值临时对象

您能否解释一下以下机制之间的区别:

关于实例化,我的推理是否正确?为什么不首先实例化为const T&

谢谢

0 投票
2 回答
523 浏览

c++ - FCD 中的右值和临时对象

我花了很长时间才理解右值和临时对象之间的区别。但现在委员会的最终草案在第 75 页指出:

右值[...]一个xvalue、一个临时对象或它的子对象,或者一个与对象无关的值。

我不敢相信我的眼睛。这一定是一个错误,对吧?


为了澄清,这是我对这些术语的理解:

在这个程序中,有两个表达式表示同一个临时对象:prvaluestd::string("hello")和 lvalue str。表达式不是对象,但它们的评估可能会产生一个。具体来说,prvalue 的评估产生一个临时对象,但 prvalue 不是临时对象。有人同意我的观点还是我疯了?:)

0 投票
5 回答
792 浏览

c++ - C++03 中的右值

如何判断给定参数是否是 C++03 中的右值?我正在编写一些非常通用的代码,如果可能的话需要参考,否则需要构造一个新对象。我可以重载以采用按值和按引用并让右值返回调用按值函数吗?

还是我有一种非常令人作呕的感觉,这就是右值引用在 C++0x 中的原因?

编辑:

is_rvalue = !(is_reference || is_pointer) ?

0 投票
1 回答
445 浏览

c++ - 带有析构函数的 C++ 右值表达式在 Visual Studio 2010 中生成警告 C4701

以下 C++ 代码在 Visual Studio 2010 中编译时不会发出警告:

但是,如果 str_wrapper 具有用户定义的析构函数,则代码会在 callFunc(x, y) 行上生成警告:

    警告 C4701:使用了可能未初始化的局部变量“y”。

p>

如果两个示例都产生了警告,或者两个示例都没有产生警告,我会很高兴。我是否遗漏了一些晦涩的 C++ 规则,或者这是一个编译器错误?