问题标签 [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.
c++ - 将函数标识符作为右值引用传递并对其应用 std::move()
考虑以下代码段
我正在转换sum
为右值引用,将其存储在 中c
,然后调用这两个函数而没有明显的不当行为。这是为什么?std::move
不应该sum
处于无效状态吗?
c++ - 从标准容器中移动元素是否合法?
我正在编写一个需要高效功能来过滤成员容器的类(比如说std::vector
)。这个函数应该有类似下面的接口:
该函数应使容器处于以下状态: -应删除items
索引指向的项目 - 其他项目应保留在容器中,保持初始顺序。inds
为简单起见,我们假设它inds
是一个完美的容器,每个操作都具有 O(1) 并且所有索引都有效且没有重复。
我的想法是创建第二个容器,保留所需空间,然后将std::move
未索引的每个元素移动(通过)inds
到这个新容器中;然后只需交换旧容器和新容器。
例如像这样:
我的问题是:
1)在(或通常任何其他标准容器)std::move
内的某些元素上使用后,vector
是否会出现诸如双重破坏这些元素之类的问题?
2)有没有一种标准方法可以有效地进行这种过滤?
c++ - 如何根据对象是否为右值引用路由到不同的实现?
例如,我有一个名为的类MyClass
并从中创建一个实例:
我有两种方法来调用它的方法。
选项1:直接调用方法
选项2:obj
先转换为右值引用,然后调用方法
我想知道是否可以method
在选项 1 和选项 2 之间创建不同的实现。有没有办法根据对象是否是右值引用来路由/重载方法?
c++ - 使用 std::move 从 std::optional 缓冲区传递参数时指向空白空间的变量
尝试编写简单的代码来模拟工厂中的解析包。我正在发送一个保存在缓冲区中的包,例如:
发送类:
使用功能:
在将参数传递给对象的函数时:
包已将移动运算符定义为默认值:
下面的函数在传递对象时工作正常,例如:
似乎传递给函数的参数指向一个空的地方,如下所示:
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
先感谢您。
c++11 - 将 RepeatedPtrField 分配给 protobuf 消息中的重复字段
我有一个RepeatedPtrField<M::Table>
和一个 protobuf 消息 M 为:
如何创建具有 RepeatedPtrField 内容的 M 实例。我可以编写一个 for 循环来显式复制数据,但我目前正在寻找更简洁的东西,最好使用std::move()
类似优化。
c++ - 为什么当我 for(auto& it : myUnorderedMap) {... = std::move(it.second)} 时得到一个 const 引用?
最小可复制示例cpp.sh/2nlzz:
给我
我确实为它定义了一个移动构造函数,Movable
并希望它只被移动,而不是被复制,所以它不使用常规赋值运算符很好,我猜它试图使用它,因为it.second
返回 aconst Movable &
而不是 a Movable &
,但为什么呢?
我知道这it.first
必须是 const,因为键不能被弄乱,但是从值中移动应该没问题。
为什么我在这里得到一个 const 引用,我怎样才能修复代码以便我可以移动?
c++ - 使用 std::move over ofstream
在尝试一些互斥锁打印功能时,我有一个这样的想法:
在打电话的时候,我做了这样的事情:
看来我没有设法移动std::cout
,因为下一行仍然有效。发生了什么事?std::move
还可以绑定参考吗?另外,如果我要把它变成可用的类,这是一个坏主意吗?[编辑]这看起来确实是个坏主意,因为同步存在问题。我试图理解相同。任何提示都是最受欢迎的。我想,我需要更深入地研究 r 值引用。
c++ - 运算符 = 的 C++ 结果在返回 *this 后发生变化
在这里,我有一个非常简单的程序,可以将值从一个对象移动到另一个对象,确保从获取它的对象中删除该值(留下“0”)。
正如预期的那样,这个程序的输出是:
'b' 的值从对象 b 转移到对象 a,留下一个 '0'。现在,如果我用一个模板来概括这一点,以(希望)自动执行移动和删除业务,这就是我最终得到的......(当然是精简的)。
运行时,输出为:
哦哦!不知何故,两个对象都被“删除”了。当我逐步浏览移动赋值运算符代码的主体时......一切似乎都很好!a.m_val 是'b',就像我们期望的那样......直到return *this;
声明。一旦它从函数返回,该值突然被设置回“0”。任何人都可以阐明为什么会这样吗?
c++ - 由另一个线程移动 std::shared_ptr 是否安全
在 GUI 线程中,我创建了一个捕获 shared_from_this() 指针的 std::function 对象。之后 std::function 对象被另一个线程 std::moved 多次(但该对象从未被复制)。最后,std::function 对象被主线程调用并被主线程销毁。
以这种方式使用 std::shared ptr 是否安全?
c++ - 为什么当构造函数引用字符串时不能正确打印?
我有以下代码,当调用其析构函数时它不会打印正确的字符串
输出:构造的静态 Tracer。
“1.Q”</p>
但以下代码按预期工作:
输出:构造的静态 Tracer。
静态示踪剂被破坏。
或者当使用 stringview 或简单的 stings 时。
在第一个代码中的程序终止期间,我们是如何丢失对字符串的引用的?
我们不应该使用 move() 释放对字符串的引用,因为它具有构造函数作用域吗?
谢谢!