我有函数foo,它std::string
作为参数:
void foo(std::string);
我放了一个连接字符串:
std::string str_1= "example_str_1";
std::string str_2 = "example_str_2";
foo(str_1+str_2);
这是将连接字符串与std::move
一起使用的好方法?
foo(std::move(str_1+str_2));
放置连接与std::move
有什么区别吗?
No.std::move
的目的是转换为右值,但str_1+str_2
已经是右值,因此move
调用是多余的。
这里更大的改进空间在于foo
的签名——为什么它需要按价值std::string
?如果它只观察数据,这里真正的胜利将是将foo
更改为void foo(std::string const&)
,或者使用类似于 C++17 std::string_view
的东西。
没有区别,因为std::string
有一个移动构造函数。
string (string&& str) noexcept;
获取 str 的内容留在
未指定但有效的 州。
裁判