问题标签 [rvalue-reference]

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 投票
2 回答
400 浏览

c++ - RValue、模板解析和复制构造函数(在 Visual C++ 2010 中)

我正在构建一个简单的容器类,但遇到了一些问题(重新组装Visual C++ 2010 中的那些,右值引用错误?

上面的代码给出了以下错误:

如何在不使用链接问题中描述的技巧的情况下纠正此错误?

谢谢!

编辑: 最让我困惑的是为什么没有调用两个专门的构造函数。他们更适合通话。

0 投票
2 回答
1382 浏览

c++11 - 什么是函数类型的右值引用?

我最近围绕 C++0x 的 glvalues、xvalues 和 prvalues 以及右值引用的概念进行了思考。但是,我仍然无法理解一件事:

什么是“函数类型的右值引用”?它在草案中多次被提及。为什么要引入这样一个概念?它有什么用途?

0 投票
1 回答
179 浏览

c++ - 局部变量的引用折叠

在参数化 on 的函数模板中T,类型T&&可能是也可能不是右值引用,具体取决于参数的值类别:

同样的规则是否也适用于自动推断类型的局部变量?

0 投票
1 回答
186 浏览

c++11 - 使用右值引用重载

完美的转发很棒。但是,如果我不想完美地转发而只是重载,我该怎么办呢?

不起作用,因为第一个重载将调用完美转发。我真的很喜欢与第一个是普通左值引用非常相似的行为——其中 T 始终是值类型。

0 投票
2 回答
938 浏览

c++ - Visual Studio 2010 中的右值引用

Visual Studio 2010 中实现的右值引用与 C++11 中指定的右值引用有什么区别?在 Visual Studio 2010 中使用重值引用时是否有任何需要注意的特殊陷阱,如果由符合 C++11 的编译器编译,可能会使源代码无效或工作方式不同?

0 投票
2 回答
275 浏览

operator-overloading - C++0x T operator+(const T&, T&&) 模式,还需要移动吗?

前段时间有人告诉我,实现二元运算符的通常模式需要move在返回中使用 final。

但是现在有一个特殊规则,在return编译器中可能会将返回值视为临时值,然后就没有必要了——一个简单的return b就足够了。

但话又说回来,在这个函数中b有一个名字,因此,它是一个LValue——这会阻碍编译器将它视为临时变量,并且move是必需的。

在最新版本的 C++0x 标准中仍然是这种情况吗?我们需要move实现上述模式吗?

0 投票
2 回答
5163 浏览

c++ - Intuitive understanding of functions taking references of references

Possible Duplicate:
What does T&& mean in C++11?

For some reason, this is eluding my intuition, and I cannot find any explanation on the internet. What does it mean for a C++ function to take a reference of a reference? For example:

I understand the idea of passing-by-reference, so

works and is intuitive to me.

0 投票
3 回答
1723 浏览

c++ - C++0x 中的“id”函数

阅读这个关于从函数返回右值引用的答案让我思考,如何id在 C++0x 中编写函数。

基本上,我想id成为一个什么都不做的函数,一个对程序没有明显影响的函数。

我的第一次尝试如下:

但是,我担心在这种情况下,x2 是一个悬空引用,因为X("x2")在“第 2 行”执行之前被销毁。

所以在这里,很明显id有一个可观察的效果。

如何id在 C++0x 中编写函数,该函数特别适用于没有移动/复制构造函数的类型。

0 投票
1 回答
1887 浏览

rvalue-reference - 初始化列表中的右值引用使用

我最近一直在玩右值引用,我遇到了一个奇怪的问题。让我们定义一个名为 Foo 的简单类,其中包含一个vector< int >

Foo可以通过传递这样的临时值来构造实例vector< int >

现在,当我尝试单步执行这段代码时,我注意到里面的向量Foo是使用复制构造函数而不是移动构造函数构造的。但是,如果我以这种方式指定构造函数:

v_然后,适当地调用成员的移动构造函数。为什么呢?为什么std::move(v)初始化列表中的冗余是必要的?为什么编译器无法推断出调用向量移动构造函数的意图,因为相应的Foo构造函数参数被指定为右值引用?

顺便说一句,我正在使用带有 -std=c++0x 选项的 GCC 4.6。

谢谢你的帮助。PMJ

0 投票
1 回答
187 浏览

c++ - 缺失一元 std::copy 的最佳实现

C++11 引入了语义以避免不必要地复制对象,并std::move在发生复制时应用这些语义。但是,现在也有一些情况需要副本,但不是默认值。

例如,考虑这个天真的实现reverse。因为基于范围for使用完美转发,所以对循环内的容器进行修改就等于损坏。

目标是使用

看起来很简单……接受任何参数,获取底层类型并返回一个临时副本。