CPP 中的字符串加法关联性
string addition associativity in cpp
string result;
result += argv[0] + " "; //Case1: throws error: invalid operands
result = result + argv[0] + " "; //Case2: works fine
看起来上面的加法语句并不相等。 我认为在案例 1 中,argc[0] + " " 被视为 (argv[0] + " "( 是我的理解正确吗? 有人可以解释这种行为吗?
运算符+
是从左到右关联的,因此让我们从假设a + b + c
是(a + b) + c
开始。您可以忽略示例中的=
和+=
运算符,因为它们稍后会发挥作用。
这里的问题源于argv[0]
是一个char*
,而不是一个std::string
,所以要允许argv[0] + " "
你需要一个不存在的自由operator+(const char*, const char*)
。
另一方面,std::string
有
string::string& operator+(const char* s) const;
因此,第二个方案有效,因为它从std::string
开始并产生std::string
结果。
你的理解是正确的。这就是案例 1 失败的原因,因为您无法将operator+
应用于const char[]
和const char[]
。