问题标签 [move-semantics]
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++ - 当向量增长时如何强制执行移动语义?
我有std::vector
一个特定类的对象A
。该类是非平凡的,并且定义了复制构造函数和移动构造函数。
如果我用对象填充向量A
(使用 eg myvec.push_back(a)
),向量的大小会增加,使用复制构造函数A( const A&)
来实例化向量中元素的新副本。
我可以以某种方式强制A
使用类的移动构造函数吗?
c++ - initializer_list 和移动语义
我可以将元素移出 astd::initializer_list<T>
吗?
由于std::intializer_list<T>
需要特别的编译器注意并且没有像 C++ 标准库的普通容器那样的值语义,我宁愿安全也不愿道歉和问。
c++ - unique_ptr C++03 仿真中的 move 函数
我试图了解如何实现unique_ptr 的 C++03 仿真。unique_ptr 很像 std::auto_ptr 但更安全。在 auto_ptr 隐式转移所有权(即,静默)的情况下,它会吐出编译器错误。例如,一个简单的分配。功能move
是模拟 unique_ptr 安全性的关键。
问题:
- 为什么有三个移动功能?
第三个移动函数接受引用并将其转换为右值,实现(简化)如下。
/li>
在上面的代码中,对 T 的显式转换似乎是不必要的。事实上,Visual Studio 2010 在没有显式转换为 T 的情况下非常满意。
但是,g++、clang、Comeau 不喜欢第二个版本。这些编译器抱怨没有构造函数unique_ptr<T>
作为detail_unique_ptr::rv<T>
参数。这是为什么?detail_unique_ptr::rv<T>
unique_ptr 已经定义了一个作为参数的(非显式)构造函数。为什么不自动捡起那个?
c++ - 我可以列出初始化只移动类型的向量吗?
如果我通过我的 GCC 4.7 快照传递以下代码,它会尝试将unique_ptr
s 复制到向量中。
显然这行不通,因为std::unique_ptr
不可复制:
错误:使用已删除的函数 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = int; _Dp = std::default_delete; std::unique_ptr<_Tp, _Dp> = std::unique_ptr]'
GCC 尝试从初始化列表中复制指针是否正确?
c++ - 什么是“*this 的右值引用”?
在 clang 的C++11 状态页面中遇到了一个名为“*this 的右值引用”的提议。
我已经阅读了很多关于右值引用并理解它们的内容,但我认为我不知道这一点。使用这些术语,我也无法在网上找到太多资源。
页面上有提案文件的链接:N2439(将移动语义扩展到 *this),但我也没有从那里得到太多示例。
这个功能是关于什么的?
c++ - 既然我们已经有了移动语义,那么专门化 std::swap 了吗?
可能重复:
移动语义 == 自定义交换功能已过时?
这是std::swap
C++11 中的样子:
当然,如果我的类定义了一个移动构造函数和一个移动赋值运算符,我是否仍然需要专注std::swap
于我自己的类型,或者std::swap
尽可能高效?
c++ - 使用隐式可转换对象调用移动重载函数时出现编译错误
该程序不使用编译clang++ test.cpp -std=c++0x
:
编译错误:
为什么它不编译?为什么编译器更喜欢A::operator = (A&&)
over A::operator = (const A&)
?
另外,为什么会A a = b;
compile while both A a; a = b;
(上述程序)而A a(b);
do not?
c++ - C++ - Boost.Promise、Boost.Unique_Future 和移动语义
我正在关注 Bartosz Milewski 的一些教程,我觉得这些教程非常有用。然而,由于作者使用 C++11 线程标准的just::thread实现(我还没有),我决定现在使用 boost 线程,因为本教程的作者说它对这样做。本系列的前三个教程似乎就是这种情况,但我在第四个教程中遇到了一些问题。这是我的代码:
以下行似乎提出了一个我不明白的问题:
编译器抱怨的地方:
错误 C2248:“boost::promise::promise”:无法访问在“boost::promise”类中声明的私有成员
谁能提出问题可能是什么?
提前致谢!
c++ - VS2010 绑定实现不支持只移动类型?
我发现以下代码在 Visual Studio 2010 中无法编译(但在 GCC 中运行良好):
我得到的错误是:
'std::unique_ptr<_Ty>::unique_ptr' : 无法访问在类 'std::unique_ptr<_Ty>' 中声明的私有成员
是因为 VS2010 绑定实现不支持仅移动类型吗?