问题标签 [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.
c++ - RValue、模板解析和复制构造函数(在 Visual C++ 2010 中)
我正在构建一个简单的容器类,但遇到了一些问题(重新组装Visual C++ 2010 中的那些,右值引用错误?)
上面的代码给出了以下错误:
如何在不使用链接问题中描述的技巧的情况下纠正此错误?
谢谢!
编辑: 最让我困惑的是为什么没有调用两个专门的构造函数。他们更适合通话。
c++11 - 什么是函数类型的右值引用?
我最近围绕 C++0x 的 glvalues、xvalues 和 prvalues 以及右值引用的概念进行了思考。但是,我仍然无法理解一件事:
什么是“函数类型的右值引用”?它在草案中多次被提及。为什么要引入这样一个概念?它有什么用途?
c++ - 局部变量的引用折叠
在参数化 on 的函数模板中T
,类型T&&
可能是也可能不是右值引用,具体取决于参数的值类别:
同样的规则是否也适用于自动推断类型的局部变量?
c++11 - 使用右值引用重载
完美的转发很棒。但是,如果我不想完美地转发而只是重载,我该怎么办呢?
不起作用,因为第一个重载将调用完美转发。我真的很喜欢与第一个是普通左值引用非常相似的行为——其中 T 始终是值类型。
c++ - Visual Studio 2010 中的右值引用
Visual Studio 2010 中实现的右值引用与 C++11 中指定的右值引用有什么区别?在 Visual Studio 2010 中使用重值引用时是否有任何需要注意的特殊陷阱,如果由符合 C++11 的编译器编译,可能会使源代码无效或工作方式不同?
operator-overloading - C++0x T operator+(const T&, T&&) 模式,还需要移动吗?
前段时间有人告诉我,实现二元运算符的通常模式需要move
在返回中使用 final。
但是现在有一个特殊规则,在return
编译器中可能会将返回值视为临时值,然后就没有必要了——一个简单的return b
就足够了。
但话又说回来,在这个函数中b
有一个名字,因此,它是一个LValue——这会阻碍编译器将它视为临时变量,并且move
是必需的。
在最新版本的 C++0x 标准中仍然是这种情况吗?我们需要move
实现上述模式吗?
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.
c++ - C++0x 中的“id”函数
阅读这个关于从函数返回右值引用的答案让我思考,如何id
在 C++0x 中编写函数。
基本上,我想id
成为一个什么都不做的函数,一个对程序没有明显影响的函数。
我的第一次尝试如下:
但是,我担心在这种情况下,x2 是一个悬空引用,因为X("x2")
在“第 2 行”执行之前被销毁。
所以在这里,很明显id
有一个可观察的效果。
如何id
在 C++0x 中编写函数,该函数特别适用于没有移动/复制构造函数的类型。
rvalue-reference - 初始化列表中的右值引用使用
我最近一直在玩右值引用,我遇到了一个奇怪的问题。让我们定义一个名为 Foo 的简单类,其中包含一个vector< int >
:
Foo
可以通过传递这样的临时值来构造实例vector< int >
:
现在,当我尝试单步执行这段代码时,我注意到里面的向量Foo
是使用复制构造函数而不是移动构造函数构造的。但是,如果我以这种方式指定构造函数:
v_
然后,适当地调用成员的移动构造函数。为什么呢?为什么std::move(v)
初始化列表中的冗余是必要的?为什么编译器无法推断出调用向量移动构造函数的意图,因为相应的Foo
构造函数参数被指定为右值引用?
顺便说一句,我正在使用带有 -std=c++0x 选项的 GCC 4.6。
谢谢你的帮助。PMJ
c++ - 缺失一元 std::copy 的最佳实现
C++11 引入了语义以避免不必要地复制对象,并std::move
在发生复制时应用这些语义。但是,现在也有一些情况需要副本,但不是默认值。
例如,考虑这个天真的实现reverse
。因为基于范围for
使用完美转发,所以对循环内的容器进行修改就等于损坏。
目标是使用
看起来很简单……接受任何参数,获取底层类型并返回一个临时副本。