移动语义是一种编程语言功能,当源对象是临时对象或其他过期对象时,允许复制操作被更有效的“移动”替换。
我正在阅读 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 节。
我有一个如下所示的 API: void WriteDefaultFileOutput(std::wostream &str, std::wstring 目标) { //一些在打印目标之前修改目标的代码等等... } 我想知道...
对于已构造的对象,使用 std::move 的 C++11 Push_back() 与 emplace_back() 的效率
在C++11中,emplace_back()通常比push_back()更可取(就效率而言),因为它允许就地构造,但是当使用push_back(std::move())时仍然是这种情况已经-
在 C++03 编译器上使用移动模拟将 boost::unique_lock 作为返回值从函数中移出是否安全?
我有以下可移动但不可复制的类,可用于同步对某些共享资源的访问: 类wrapper_with_lock{ 私人的: BOOST_MOVABLE_BUT_NOT_COPYABLE(
有没有办法从采用右值引用的构造函数调用移动构造函数? [重复]
假设我有一个带有移动构造函数的 A 类: A类{ 民众: A(A &&other) = 默认值; } 假设我有一个包含 A 成员的类: B类{ 一个一个; } 第一部分
如果在 C++ 中使用仅移动类型的容器的复制构造函数,会发生什么? [已关闭]
如果在 C++ 的容器中使用可移动但不可复制的类型,例如 unique_ptr, 然后使用依赖于副本的函数,例如复制构造函数、范围插入、运算符 = (&) 或...
使用 std::move 返回 std::vector [重复]
我有一个非常基本的问题:使用 std::move 返回 std::vector 是一个好主意吗?例如: A类{}; std::vector && func() { std::向量 v; ...
考虑支持默认移动语义的类型 T。还要考虑下面的函数: Tf() { Tt; 返回t; } To = f(); 在旧的 C++03 中,一些非优化编译器可能会调用 c...
当我们使用右值引用时到底会发生什么以及 std::move 是如何工作的? [重复]
我正在尝试理解右值引用和移动语义。在下面的代码中,当我将 10 传递给 Print 函数时,它会调用右值引用重载,这是预期的。但到底发生了什么,w...
我想知道将函数的返回值移动到 std::string 对象而不是直接复制它是否有任何意义? “ip_str”是应该获得...的返回值的对象
以下代码 使用 vptr = std::vector>; 自动 m = std::unordered_map{}; m.try_emplace(0, 移动(vptr{})); 编译失败,抱怨...
我的任务是在 C++ 中为机器人游戏实现移动语义(移动构造函数和移动赋值运算符)。 我收到一些反馈说我应该从其他人那里“窃取”资源...
使用 `{}` 构造 std::tuple 时,Clang-Tidy 对于 std::move 是否正确?
我正在用 C++ 实现一个函数,特别是一个可调用的类对象,旨在返回一个包含对象容器和结果的 std::tuple。经过一些调整(见下文)我......