移动语义是一种编程语言功能,当源对象是临时对象或其他过期对象时,允许复制操作被更有效的“移动”替换。
为了使带有 C++11 引用限定符的这段代码按预期工作,我必须引入一个听起来不对的 std::move(*this) 。 #包括 结构体A{ void Gun() const&...
我可以将 std::unique_ptr<T> 移动到 std::vector<T> 吗?
假设我有一个由一些通用 T 对象组成的向量: std::vector vector_of_ts = {...}; 该向量本质上是一个堆分配的 T 对象数组,在底层。现在,假设我有以下内容...
我的问题在本质上与避免额外的复制在从C++中的返回值创建元组时类似,但是因为我根本不理解答案并且因为我正在谈论标准ty...
以为例 无效 f(B b, A&& a) {...} B g(B b, A a) {...} int main() { 乙b; 一个一个; f(g(b, a), std::move(a)); } 我认为这将是有效的代码,因为 std::move() 是
我有一个简单的类,有一些简单的成员,并且没有分配。我计划添加一个移动构造函数/作业。这些原语不会比普通原语更有效。
字符串移动后,std::string::c_str()返回的数据仍然有效吗?
假设我有一个异步发送 const char * 数据的函数,并在发送数据或发生错误时调用回调(我省略了与问题无关的错误处理): 无效
关于 unique_ptr 行为与 std::move 的特定用法的问题
基于排序操作,以下代码在 C++20 中定义良好吗?或者它是否具有未定义的行为? #包括 #包括 使用命名空间 std; 结构体A { ...
考虑以下示例: #包括 #包括 #包括 模板 struct Foo : public Base { 使用基::基; }; 结构...
这是来自于此的代码测试。 我将其中一些复制如下: //结构体定义。各类印刷品 struct Snitch { // 注意:所有方法都有副作用 告密者(){cout<< "...
哪些std类型在移动构造函数中用作arg后保证为空/null
我知道shared_ptr,unique_ptr,weak_ptr在用作相同类型的构造函数中的右值引用参数后保证为空,但我想知道标准是否为某些其他指定了这一点...
noexcept 对显式默认的移动构造函数/赋值运算符有影响吗?
C级 { 民众: C(C&&) = 默认值; // (1) C& 运算符=(C&&) = 默认; // (1) C(C&&) noexcept = 默认; // (2) C& 运算符=(C&...
EMC++ 中提到的“源对象是左值”场景是什么,其中移动语义没有提供任何效率增益
Effective Modern C++ 中的第 29 条,Scott Meyers 列出了移动语义不能提高代码性能的三种场景, [...]移动语义对你没有好处: 无移动操作:要成为的对象
我正在阅读 Bjarne Stroustrup 所著的《C++ 之旅》第二版的第 5 章。他正在使用 Vector 的示例实现来传达他的想法,并进入移动构造函数并显示 c...
当我已经有一个参数被作为右值引用时,我是否需要使用移动构造函数?
类EntityBase { 民众: EntityBase() { std::cout << "EntityBase constructor called." << std::endl; } EntityBase(const std::string& name) : m_name(name) { std::c...
问题: 我想将元素移出类成员元组类型变量,但我想知道是否允许以下代码(接近最小的示例,仅限于 C++14): #包括<...
仅考虑可移动但不可复制的对象(例如 std::thread 或 std::unique_ptr),我想通过将其作为参数传递来转移此类对象包含的资源的所有权...
为什么在自定义视图类型中使用 std::move 和 std::list 会导致无限递归?
当我决定修改提供的代码示例以查看它是否适用于 std::list 时,我正在阅读 Rainer Grimm 的书《C++20:获取有关定义自己的视图类型的详细信息》的第 5.1.7.2 节。
我对以下移动堆栈对象的代码感到困惑: int *pOuter = nullptr; { 整数j; std::cout << "top of the inner stack=" << &j << s...
我什么时候想使用 auto&& 而不是 decltype(auto) 或 ->decltype(return-expr) 作为函数定义的返回类型?
采用三个返回纯右值、左值、x值的函数: int f(); int&f(int); int&& f(int, int); 并通过返回 decltype(auto) 的函数调用它们 decltype(auto) 返回DecltypeOf(
为什么在自定义视图类型中使用`std::move`和`std::list`会导致无限递归?
当我决定修改提供的代码示例以查看它是否适用于 std::list 时,我正在阅读 Rainer Grimm 的书《C++20:获取有关定义自己的视图类型的详细信息》的第 5.1.7.2 节。