就下面的过程而言,以下两个陈述的区别是什么:
string strA = "stringA" + "stringB";
string strB = string("stringA") + string("stringB");
答案 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构造函数。编译器可能会优化所有这些。