问题标签 [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 投票
3 回答
2018 浏览

c++ - 获取右值的地址

这不适用于 GCC 4.6,而它曾经在以前的版本中工作。

现在它说:获取 xvalue 的地址(右值引用)。

有什么方法可以安全地将右值的地址传递给另一个函数?

0 投票
2 回答
88 浏览

c++ - 将函数声明为 BigStruct&& foo(...); 是一种好习惯吗?

输出是:


示例代码显然表明 f_1() 比 f_2() 更有效。

所以,我的问题是:

我们是否应该总是将函数声明为 some_return_type&& f(...); 而不是 some_return_type f(...); ?

如果我的问题的答案是正确的,那么接下来是另一个问题:

有许多函数声明为 some_return_type f(...); 在 C++ 世界中,我们应该将它们更改为现代形式吗?

0 投票
9 回答
25563 浏览

pointers - Go中的临时地址?

处理这种情况的最干净的方法是什么:

这会产生错误:

不能取 a() 的地址

我的理解是,如果获取地址,Go 会自动将局部变量提升到堆中。这里很清楚,要取返回值的地址。处理这个问题的惯用方法是什么?

0 投票
1 回答
413 浏览

c++ - 数组和右值(作为参数)

我想知道是否有任何方法可以区分以下代码中显示的函数调用(以数组作为参数):

foo“函数族”能够区分临时对象和命名对象。不是 foo_array 的情况。

在 C++11 中可能吗?如果没有,你认为可能吗?(显然改变了标准)

问候。费尔南多。

0 投票
2 回答
876 浏览

c++ - 右值引用不在 Mac OS X 10.7.4 和 FreeBSD 9.0 上

这是我的代码

当我使用 GCC 4.7.0 或 clang 3.1 和 --std=c++0x 在 Linux 上编译代码时,它输出 0 和 2。但是,当我在 Mac OS X 10.7.4 或 FreeBSD 9.0 上使用带有--std=c++0x 的clang 3.0 或clang 3.1,它输出2 和2。我的Mac OS X 和FreeBSD 上的GCC 是v4.2.1,它不支持--std=c++0x。所以我使用了 Boost.Move:

当我使用带有 -I~/boost_1_49_0 的 GCC 4.2.1 在 Mac OS X 上编译代码时,它仍然输出 2 和 2。

更新:当我添加 --stdlib=libc++ 时,代码输出 0 和 2。右值引用似乎工作。但是,当我将向量类型从 size_t 更改为 string 时,我得到了一个编译错误,即使我注释了最后三行代码。这次问题与右值引用无关,而是来自 push_back() 函数。当我删除 --stdlib=libc++ 时,它可以通过编译。

哪个铿锵

clang++ --std=c++11 --stdlib=libc++ rval.cpp

0 投票
3 回答
716 浏览

c - C如何识别右值和左值?

在 C 中,有没有办法识别右值和左值?

其中一些很容易识别,比如在赋值中,左边的值是左值,右边的值是右值。

但在其他情况下,很难识别这样的规则。

例如:*p++ and i++(其中 p 是指向整数的指针,i 是整数) - 如何识别它是右值还是左值?上下文是++*p++有效的,而++i++不是因为i++是右值(正如严肃的人所说)。

如何识别表达式中的右值和左值?

0 投票
2 回答
165 浏览

c++ - 返回*这个;删除指针

我认为发生的是ASetVar 返回的右值是相同的副本Class并共享相同的指针Var。但是当右值调用它的解构函数时,它会删除Class's Val

等于8 POINT A *Val,但POINT B *Val等于-17891602。由于尝试删除Val两次,我还得到 _BLOCK_TYPE_IS_VALID(pHead->nHeadUse) 。

删除解构函数可以解决问题,但会造成内存泄漏。

0 投票
3 回答
2180 浏览

c++ - 我什么时候应该选择复制省略而不是通过 const 引用传递参数?

可能重复:
按值传递是 C++11 中合理的默认值吗?

我在读想要速度?按值传递。戴夫亚伯拉罕关于复制省略和 RVO。我想知道为什么我们需要复制省略?

我被告知太多次,你应该通过 const 引用传递函数参数以避免复制(我读过的几乎每一本 c++ 书籍都告诉我这一点)。

假设我们有两个函数:

如果实际参数是右值,则在两个函数中都将避免复制。但是如果实际参数是一个左值,复制只会在 f1 中避免,而不是在 f2 中。那么为什么我们需要这个功能呢?

0 投票
2 回答
128 浏览

c++ - 右值委托,或 const 成员函数的右值等价物

显然,上面评论中的函数不是合法的 C++,但我需要知道是否有办法做到这一点:

依此类推,而每次调用frob()都会有效地调用其“移动”版本。由于这是可以在编译时确定的,我想不出任何理由让它不以某种形式存在。

我可以这样写:

这将导致:

这读起来有点烦人,也没有实现我用委托“拼写出来”的目标。

0 投票
2 回答
724 浏览

c++ - 三元运算符的结果不是右值

如果您使用 C++11 编译器编译此程序,则向量不会移出函数。

如果您像这样返回实例,它会被移动。

这是关于 ideone 的演示

我用 gcc 4.7.0 和 MSVC10 试过了。两者的行为方式相同。
我猜为什么会发生这种情况:
三元运算符类型是左值,因为它是在执行 return 语句之前评估的。此时 a 和 b 还不是 xvalues(即将到期)。
这个解释正确吗?

这是标准的缺陷吗?
这显然不是预期的行为,在我看来是一个非常常见的情况。