在c ++中连接字符串时的区别

时间:2015-01-23 16:06:20

标签: c++

就下面的过程而言,以下两个陈述的区别是什么:

string strA = "stringA" + "stringB";
string strB = string("stringA") + string("stringB");

2 个答案:

答案 0 :(得分:3)

差异非常重要。

"stringA"的类型为char const[8]

std::string("stringA")的类型为std::string

没有operator+定义接受两个char const[]char const*类型的参数。

然而,重载operator+(std::string, chat const*) and operator+(chat const*, std::string)

换句话说,如果您想使用operator+连接字符串文字,则第一个或第二个字符串必须为std::string,以便它发现重载operator+。例如。

std::string("a") + "b" + "c" + "d"
// or 
"a" + std::string("b") + "c" + "d"

答案 1 :(得分:0)

string strA = "stringA" + "stringB";

错误,无法添加两个指针

string strA = "stringA"  "stringB";

在编译器中连接,与“stringAstringB”

相同
string strB = string("stringA") + string("stringB");

创建两个std :: string对象,添加它们,返回一个新对象,然后将构造移动到strB中,因此在c ++ 11中只应调用3个std :: string构造函数。编译器可能会优化所有这些。