问题标签 [stdmove]

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 回答
61 浏览

c++ - 将函数标识符作为右值引用传递并对其应用 std::move()

考虑以下代码段

我正在转换sum为右值引用,将其存储在 中c,然后调用这两个函数而没有明显的不当行为。这是为什么?std::move不应该sum处于无效状态吗?

0 投票
2 回答
129 浏览

c++ - 从标准容器中移动元素是否合法?

我正在编写一个需要高效功能来过滤成员容器的类(比如说std::vector)。这个函数应该有类似下面的接口:

该函数应使容器处于以下状态: -应删除items索引指向的项目 - 其他项目应保留在容器中,保持初始顺序。inds

为简单起见,我们假设它inds是一个完美的容器,每个操作都具有 O(1) 并且所有索引都有效且没有重复。

我的想法是创建第二个容器,保留所需空间,然后将std::move未索引的每个元素移动(通过)inds到这个新容器中;然后只需交换旧容器和新容器。

例如像这样:

我的问题是:

1)在(或通常任何其他标准容器)std::move内的某些元素上使用后,vector是否会出现诸如双重破坏这些元素之类的问题?

2)有没有一种标准方法可以有效地进行这种过滤?

0 投票
1 回答
31 浏览

c++ - 如何根据对象是否为右值引用路由到不同的实现?

例如,我有一个名为的类MyClass并从中创建一个实例:

我有两种方法来调用它的方法。

选项1:直接调用方法

选项2:obj先转换为右值引用,然后调用方法

我想知道是否可以method在选项 1 和选项 2 之间创建不同的实现。有没有办法根据对象是否是右值引用来路由/重载方法?

0 投票
0 回答
48 浏览

c++ - 使用 std::move 从 std::optional 缓冲区传递参数时指向空白空间的变量

尝试编写简单的代码来模拟工厂中的解析包。我正在发送一个保存在缓冲区中的包,例如:

发送类:

使用功能:

在将参数传递给对象的函数时:

包已将移动运算符定义为默认值:

下面的函数在传递对象时工作正常,例如:

似乎传递给函数的参数指向一个空的地方,如下所示:

Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

先感谢您。

0 投票
1 回答
823 浏览

c++11 - 将 RepeatedPtrField 分配给 protobuf 消息中的重复字段

我有一个RepeatedPtrField<M::Table>和一个 protobuf 消息 M 为:

如何创建具有 RepeatedPtrField 内容的 M 实例。我可以编写一个 for 循环来显式复制数据,但我目前正在寻找更简洁的东西,最好使用std::move()类似优化。

0 投票
2 回答
110 浏览

c++ - 为什么当我 for(auto& it : myUnorderedMap) {... = std::move(it.second)} 时得到一个 const 引用?

最小可复制示例cpp.sh/2nlzz

给我

我确实为它定义了一个移动构造函数,Movable并希望它只被移动,而不是被复制,所以它不使用常规赋值运算符很好,我猜它试图使用它,因为it.second返回 aconst Movable &而不是 a Movable &,但为什么呢?

我知道这it.first必须是 const,因为键不能被弄乱,但是从值中移动应该没问题。

为什么我在这里得到一个 const 引用,我怎样才能修复代码以便我可以移动?

0 投票
0 回答
56 浏览

c++ - 使用 std::move over ofstream

在尝试一些互斥锁打印功能时,我有一个这样的想法:

在打电话的时候,我做了这样的事情:

看来我没有设法移动std::cout,因为下一行仍然有效。发生了什么事?std::move还可以绑定参考吗?另外,如果我要把它变成可用的类,这是一个坏主意吗?[编辑]这看起来确实是个坏主意,因为同步存在问题。我试图理解相同。任何提示都是最受欢迎的。我想,我需要更深入地研究 r 值引用。

0 投票
2 回答
54 浏览

c++ - 运算符 = 的 C++ 结果在返回 *this 后发生变化

在这里,我有一个非常简单的程序,可以将值从一个对象移动到另一个对象,确保从获取它的对象中删除该值(留下“0”)。

正如预期的那样,这个程序的输出是:

'b' 的值从对象 b 转移到对象 a,留下一个 '0'。现在,如果我用一个模板来概括这一点,以(希望)自动执行移动和删除业务,这就是我最终得到的......(当然是精简的)。

运行时,输出为:

哦哦!不知何故,两个对象都被“删除”了。当我逐步浏览移动赋值运算符代码的主体时......一切似乎都很好!a.m_val 是'b',就像我们期望的那样......直到return *this;声明。一旦它从函数返回,该值突然被设置回“0”。任何人都可以阐明为什么会这样吗?

0 投票
0 回答
116 浏览

c++ - 由另一个线程移动 std::shared_ptr 是否安全

在 GUI 线程中,我创建了一个捕获 shared_from_this() 指针的 std::function 对象。之后 std::function 对象被另一个线程 std::moved 多次(但该对象从未被复制)。最后,std::function 对象被主线程调用并被主线程销毁。

以这种方式使用 std::shared ptr 是否安全?

0 投票
1 回答
112 浏览

c++ - 为什么当构造函数引用字符串时不能正确打印?

我有以下代码,当调用其析构函数时它不会打印正确的字符串

输出:构造的静态 Tracer。

“1.Q”</p>

但以下代码按预期工作:

输出:构造的静态 Tracer。

静态示踪剂被破坏。

或者当使用 stringview 或简单的 stings 时。

在第一个代码中的程序终止期间,我们是如何丢失对字符串的引用的?

我们不应该使用 move() 释放对字符串的引用,因为它具有构造函数作用域吗?

谢谢!