CPP 中的字符串加法关联性

string addition associativity in cpp

本文关键字:关联性 字符串 CPP      更新时间:2023-10-16

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[]