move-semantics 相关问题

移动语义是一种编程语言功能,当源对象是临时对象或其他过期对象时,允许复制操作被更有效的“移动”替换。

关于std::string动作的实现

我正在研究移动 std::string 的性能。在很长一段时间里,我认为字符串移动几乎是免费的,认为编译器会内联所有内容,并且只涉及几个

回答 2 投票 0

NRVO 和 Move Semantics 可以在 C++ 中一起使用吗?

我正在从《C++ Move Semantics》一书中阅读有关 C++ 中的移动语义的内容。本书假设 NRVO 用于 createAndInsert() 函数的 return 语句。然而,它也指出移动语义...

回答 2 投票 0

std::move(*this) 是一个好的模式吗?

为了使带有 C++11 引用限定符的这段代码按预期工作,我必须引入一个听起来不对的 std::move(*this) 。 #包括 结构体A{ void Gun() const&...

回答 2 投票 0

我可以将 std::unique_ptr<T> 移动到 std::vector<T> 吗?

假设我有一个由一些通用 T 对象组成的向量: std::vector vector_of_ts = {...}; 该向量本质上是一个堆分配的 T 对象数组,在底层。现在,假设我有以下内容...

回答 1 投票 0

如何在 C++ 中返回字符串元组而不需要临时额外副本?

我的问题在本质上与避免额外的复制在从C++中的返回值创建元组时类似,但是因为我根本不理解答案并且因为我正在谈论标准ty...

回答 1 投票 0

何时对函数参数执行移动操作 c++

以为例 无效 f(B b, A&& a) {...} B g(B b, A a) {...} int main() { 乙b; 一个一个; f(g(b, a), std::move(a)); } 我认为这将是有效的代码,因为 std::move() 是

回答 2 投票 0

在链表中移动一个简单类的构造函数/赋值

我有一个简单的类,有一些简单的成员,并且没有分配。我计划添加一个移动构造函数/作业。这些原语不会比普通原语更有效。

回答 1 投票 0

字符串移动后,std::string::c_str()返回的数据仍然有效吗?

假设我有一个异步发送 const char * 数据的函数,并在发送数据或发生错误时调用回调(我省略了与问题无关的错误处理): 无效

回答 1 投票 0

关于 unique_ptr 行为与 std::move 的特定用法的问题

基于排序操作,以下代码在 C++20 中定义良好吗?或者它是否具有未定义的行为? #包括 #包括 使用命名空间 std; 结构体A { ...

回答 1 投票 0

为什么派生类可以移动构造,而基类则不能?

考虑以下示例: #包括 #包括 #包括 模板 struct Foo : public Base { 使用基::基; }; 结构...

回答 2 投票 0

关于返回值中复制构造函数的问题

这是来自于此的代码测试。 我将其中一些复制如下: //结构体定义。各类印刷品 struct Snitch { // 注意:所有方法都有副作用 告密者(){cout<< "...

回答 1 投票 0

哪些std类型在移动构造函数中用作arg后保证为空/null

我知道shared_ptr,unique_ptr,weak_ptr在用作相同类型的构造函数中的右值引用参数后保证为空,但我想知道标准是否为某些其他指定了这一点...

回答 2 投票 0

noexcept 对显式默认的移动构造函数/赋值运算符有影响吗?

C级 { 民众: C(C&&) = 默认值; // (1) C& 运算符=(C&&) = 默认; // (1) C(C&&) noexcept = 默认; // (2) C& 运算符=(C&...

回答 1 投票 0

EMC++ 中提到的“源对象是左值”场景是什么,其中移动语义没有提供任何效率增益

Effective Modern C++ 中的第 29 条,Scott Meyers 列出了移动语义不能提高代码性能的三种场景, [...]移动语义对你没有好处: 无移动操作:要成为的对象

回答 3 投票 0

Bjarne 的示例向量中移动分配的正确代码是什么?

我正在阅读 Bjarne Stroustrup 所著的《C++ 之旅》第二版的第 5 章。他正在使用 Vector 的示例实现来传达他的想法,并进入移动构造函数并显示 c...

回答 1 投票 0

当我已经有一个参数被作为右值引用时,我是否需要使用移动构造函数?

类EntityBase { 民众: EntityBase() { std::cout << "EntityBase constructor called." << std::endl; } EntityBase(const std::string& name) : m_name(name) { std::c...

回答 1 投票 0

如何将 std::tuple 元素移出类对象?

问题: 我想将元素移出类成员元组类型变量,但我想知道是否允许以下代码(接近最小的示例,仅限于 C++14): #包括<...

回答 1 投票 0

可移动但不可复制的对象:按值传递与按右值引用传递?

仅考虑可移动但不可复制的对象(例如 std::thread 或 std::unique_ptr),我想通过将其作为参数传递来转移此类对象包含的资源的所有权...

回答 1 投票 0

为什么在自定义视图类型中使用 std::move 和 std::list 会导致无限递归?

当我决定修改提供的代码示例以查看它是否适用于 std::list 时,我正在阅读 Rainer Grimm 的书《C++20:获取有关定义自己的视图类型的详细信息》的第 5.1.7.2 节。

回答 2 投票 0

为什么std::move可以移动堆栈数据对象?

我对以下移动堆栈对象的代码感到困惑: int *pOuter = nullptr; { 整数j; std::cout << "top of the inner stack=" << &j << s...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.