string result;
result += argv[0] + " "; //Case1: throws error: invalid operands
result = result + argv[0] + " "; //Case2: works fine
看起来像以上加法语句不相等。 我认为在Case1中,argc [0] +“”被视为(argv [0] +“”),我的理解正确吗? 有人可以解释这种行为吗?
答案 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[]
。