问题标签 [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 并分配给 rvalue 不会窃取内部内容?
众所周知,如果与非基本类型一起使用,c++ std::move 会窃取内部内容。我突然想到如果将左值移动到右值会发生什么。我最初认为它仍然会窃取内容。但是什么也没发生,a 的字符串还在。这是由于忽略了移动构造函数引起的吗?但我认为编译器认为命名的右值是左值,对吧?
boost - 使用 std::move 作为参数传递的共享 ptr 提升 asio 帖子
我是 boost:asio 的新手。我需要将 shared_ptr 作为参数传递给处理函数。
例如
- boost::asio::post(std::bind(&::function_x, std::move(some_shared_ptr)));
使用 std::move(some_shared_ptr) 正确吗?或者我应该如下使用,
- boost::asio::post(std::bind(&::function_x, some_shared_ptr));
如果两者都是正确的,哪一个是可取的?
提前致谢
问候尚卡尔
c++ - 将旧代码转换为 std::move 语义
我想改进一些旧代码,因为它看起来很糟糕。我认为它的作用是可以完成的std::move
,对吗?整个代码发布在这个GitHub 上。但是,我只需要改进那个特定的结构(Resource
)。
用法是:
片段
我的尝试
c++ - 通过返回移动的参数而不是通过引用来更新结构
假设我们有一个结构:
我想编写一个函数来更新 的实例S
,如下所示:
我通常更喜欢返回值,而不是通过引用传递参数并更改它。像这样的东西:
然后我可以像这样调用最后一个函数(以防我想要以前和更新实例的副本):
或者像这样(如果我只对保持更新的值感兴趣):
所以,我s
进入update
函数的参数,并在赋值(最后一行)处取回它。这合法吗?除此之外,这只是愚蠢的,我应该采用第一个解决方案吗?
c++ - 为什么在这种情况下不调用 move ctor?
其输出是(将行号添加到标准输出):
Ctor ciao
Stampa val is ciao
Val of a is ciao
Ctor test
Stampa val is test
为什么在 main 的第 2 行没有调用 mv 语义?我可能会在第四行理解有一个优化,所以只调用了构造函数,但是我无法解释第一步。有任何想法吗?
c++ - 移动后重用变量
可以进行以下操作吗?以下代码在移动后在循环(下一次迭代)中再次使用向量 v。
c++ - Move constructor for a list of Person objects
I am writing a simple code, in which I have a list of objects of class Person. The Person class
in which, the move constructor is
I also have the node structure
whose move constructor is
and finally I have the list class
whose move constructor is
My question is: inside the move constructors, is the use of std::move
correct? Particularly in the first line of code of list::insert
c++ - unique_ptr 返回带有移动语义的垃圾值
我有一个通用类,它可以存储一个值和编码为字符串的值的类型。
我还有另一个实用程序函数build_int_property,它构建了一个整数属性。但不幸的是,测试失败了。谁能解释这里出了什么问题?
c++ - 为什么 std::move() 中的 static_cast 会擦除参数的值?
我的问题包含两个部分:
功能
static_cast<Т>(arg)
会改变内部结构arg
吗?显然不是,根据这样的代码:为什么这样的代码:
其中
std::move()
仅使用 astatic_cast
到 r 值:生成一个
s1
空字符串?
我猜,这是因为使用了string after的move 构造函数s2 =
。它必须通过等于nullptr
或 0 字符串对象中的所有数据来擦除初始字符串。虽然std::move()
它本身只返回右值。这是正确的吗?
我知道我的问题是static_cast 到 r-value 引用和 std::move 在初始化中更改其参数的重复,但我还没有找到明确的解释。