void increaseNum(整数num){ num+=1; } 整型main(){ 整数myNum{5}; increaseNum(myNum);// 案例-1 increaseNum(std::move(myNum))//案例2 }
-
2 " 我想我是在说增加Num“嘿,不要创建myNum的副本,而是获取该变量的所有权并进行更改,就像通过引用一样”。 ", " 将std::move(variable)作为函数参数与通过引用传递不同吗? “:两者都错了。这不是什么 标准::移动 做。 " 如果不是,为什么我们要将std::move(variable)作为函数参数? “:对于非类类型,这是毫无意义的。只有当被调用的函数具有rvalue引用重载时,或者对于pass-by-value,如果类型具有move构造函数,这才重要。 – 用户17732522 评论 2023年4月9日13:01 -
1 这回答了你的问题吗? 为什么std::move()没有窃取int值? , stackoverflow.com/questions/3413470/… . – 用户17732522 评论 2023年4月9日13:03 -
4 你的期望是错误的。 移动语义不是“通过引用传递”。 – 山姆·瓦尔沙夫奇克 评论 2023年4月9日13:04 -
三 传递值取决于 int数字 函数签名中的参数声明。 While期间 标准::移动 对于内置类型和其他普通的可复制类型来说,这几乎毫无意义,因为它是一种选择r值引用重载的工具,而这些类型通常不存在r值引用过载。 – 用户7860670 评论 2023年4月9日13:07 -
2 改变你的思维模式 标准::移动 这样:一旦对象 标准::移动 ,它处于只适合销毁或重新分配的状态。 所以不要看 myNum(我的编号) 在你移动它之后,因为它被污染了。 (在这种情况下 整数 但如果你将“移动的对象现在已被污染”内化,你会过得更好。) – 埃尔杰伊 评论 2023年4月9日13:11