cpp中的字符串添加关联性

时间:2019-12-24 14:14:41

标签: c++

string result; result += argv[0] + " "; //Case1: throws error: invalid operands result = result + argv[0] + " "; //Case2: works fine

看起来像以上加法语句不相等。 我认为在Case1中,argc [0] +“”被视为(argv [0] +“”),我的理解正确吗? 有人可以解释这种行为吗?

2 个答案:

答案 0 :(得分:1)

运算符+是从左到右的关联,因此我们从假设a + b + c(a + b) + c开始。您可以忽略示例中的=+=运算符,因为它们稍后会起作用。

这里的问题是由于argv[0]char*而不是std::string,因此要允许argv[0] + " ",您需要一个免费的{{1} }不存在。

另一方面,operator+(const char*, const char*)

std::string

因此您的第二个方案之所以可行,是因为它以string::string& operator+(const char* s) const; 开头并产生std::string个结果。

答案 1 :(得分:0)

您的理解是正确的。这就是案例1失败的原因,因为您无法将operator+应用于const char[]const char[]