性能字符串作为函数参数

时间:2017-01-19 12:35:01

标签: c++ string

我有函数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进行连接之间有什么区别吗?

2 个答案:

答案 0 :(得分:7)

没有。 std::move的目的是转换为右值,但str_1+str_2已经是右值,使move调用变得多余。

此处需要更大的改进空间是foo的签名 - 为什么按值std::string为何?如果它只观察数据,那么真正的胜利就是将foo更改为void foo(std::string const&),或者使用类似于C ++ 17 std::string_view的内容。

答案 1 :(得分:2)

没有区别,因为std::string有一个移动构造函数。

string (string&& str) noexcept;
  

获取str的内容。
str留在未指定但有效   状态。

Ref