将 `std::move` 与接收 const ref 的函数一起使用是个好主意吗?

问题描述 投票:0回答:1

这是一个可以编译并运行的代码片段:

#include <iostream>
#include <string>

void print_str(const std::string& str) {
    std::cout << str << '\n';
}

int main() {
    std::string str = "Hello world";
    print_str(std::move(str));
}

神箭

据我了解,

std::move
在这里没有任何作用。

两个问题:

  • std::move
    在这里没有害处,只是没有效果,对吗?
  • 无论如何使用它会被认为是好的做法吗?如果我不控制
    print_str
    ,并且在通话后不需要
    str
    ,人们可能会说,如果在某个时刻
    std::move
    将被更改为获得
    print_str
    ,那么
    std::string
    将会产生积极的效果值。
c++ move-semantics
1个回答
-1
投票

据我了解,

std::move
在这里没有效果。 std::move 在这里没有危害,只是没有效果,这是正确的吗?

,有效果。

str
中的
main()
保持有效,但未指定状态。


无论如何使用它会被认为是好的做法吗?

如果在函数调用后不需要

str
,则移动而不是复制是有意义的。

但是你需要

print_str
就像


void print_str(std::string str) {
    std::cout << str << '\n';
}

然后按照你所做的那样移动。

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