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

c++11 - std::forward 的结构

可能重复:
为什么在 C++0x 右值引用的前向定义中使用标识?

我真的很好奇 - 为什么std::forward需要显式模板参数?难道不能简单

如果可能的话,我真的很喜欢所有相关的细节,而不是简化。

0 投票
4 回答
28669 浏览

c++ - 为什么有些人使用交换进行移动任务?

例如,stdlibc++ 有以下内容:

为什么不直接将两个 __u 成员分配给 *this 呢?交换是否暗示 __u 被分配了 *this 成员,只是后来分配了 0 和 false ......在这种情况下,交换正在做不必要的工作。我错过了什么?(unique_lock::swap 只是对每个成员执行 std::swap )

0 投票
3 回答
6066 浏览

c++ - 在 C++0x 中传递/移动构造函数的参数

如果我有一个带有 n 个参数的构造函数,那么任何参数都可以是右值和左值。是否可以通过右值的移动语义来支持这一点,而无需为每个可能的右值/左值组合编写 2^n 构造函数?

0 投票
4 回答
7166 浏览

c++ - 移动语义——它的全部内容是什么?

可能重复:
有人可以向我解释一下移动语义吗?

有人可以指出一个好的来源或在这里解释什么是移动语义?

0 投票
3 回答
2080 浏览

c++ - 在可移动和不可复制的类上使用移动和交换习语是否有意义

如果我有一堂课,比如

如果我没有复制构造函数,按值实现 operator= 并交换是否有意义?它应该防止复制我的类对象,Foo但允许移动。

这个类是不可复制的,所以我不应该能够复制构造或复制分配它。

编辑

我已经用这个测试了我的代码,它似乎有我想要的行为。

0 投票
2 回答
515 浏览

c++ - 右值引用和完美转发

我读过几篇关于 && 的论文,我只是好奇是否有:

或者只是通过'r'就足够了?

0 投票
1 回答
637 浏览

c++ - 命名右值引用的类型是什么?

考虑以下代码:

那么,什么是类型x?是一个int&&还是一个int&

(读完这个答案后,我问自己这个问题。)

0 投票
1 回答
334 浏览

rvalue-reference - RValue 引用的元组

下面的一段代码

我希望,在离开中间范围时,向量会破坏并尝试破坏 conatain 中的元组。这反过来破坏了 A 的对象,但有些我看不到任何对象被破坏。Valgrind 也没有显示任何内存错误。以下是使用 valgrind $valgrind ./a.out 运行时的输出

我显然在这里遗漏了一些东西。如果在中间范围内对“get()”的调用确实返回了适当的值(100 和 200),为什么在向量(和元组)被破坏时不调用“A”的析构函数?

[编辑] @Howard Hinnant:谢谢,这很有意义。我不明白的是:1)当我用右值构造一个元组并将其推送到向量时,我确实得到了 valgrind 内存错误。例如。

在最里面的范围内并添加:

到上述示例中的中间范围会产生 valgrind 内存错误,但不会产生上面显示的左值引用。

2) 有人能解释一下为什么下面的语句调用了一个 copu 构造函数和一个直接析构函数吗?

0 投票
3 回答
1217 浏览

c++ - 是否需要销毁移出的对象?

如果我 move-construct afrom b,是否仍然需要destruct b,或者我可以不这样做就逃脱?

optional<T>这个问题在模板的实现过程中闪过我的脑海。摘抄:

当然,我可以将 bool 替换为initialized一个区分已初始化、未初始化和移出的三值枚举。我只想知道这是否是绝对必要的。

0 投票
2 回答
109 浏览

visual-studio-2010 - 模板类型推导问题

我有variant课。它有一对构造函数:

现在我在这段代码中调用了这些构造函数:

symbol_type将 avariant作为此特定构造函数中的第二个参数,并且v正在被隐式转换。

但是,MSVC 将尝试使用右值引用构造函数而不是使用其他构造函数,从而在尝试new引用时导致编译错误。为什么会这样,我怎样才能让它停止?