C++ cpp中的字符串加法结合性
C++ cpp中的字符串加法结合性,c++,C++,字符串结果; 结果+=argv[0]+“”//案例1:抛出错误:无效操作数 结果=结果+argv[0]+“”//案例2:工作正常 看起来上面的加法语句不相等。 我认为在案例1中,argc[0]+''被视为(argv[0]+'')我的理解正确吗? 有人能解释一下这种行为吗?你的理解是正确的。这就是为什么案例1失败的原因,因为您无法将运算符+应用于常量字符[]和常量字符[]运算符+是从左到右关联的,所以让我们从假设a+b+c是(a+b)+c开始。您可以忽略示例中的=和+=运算符,因为它们稍后才起作用
字符串结果;
结果+=argv[0]+“”//案例1:抛出错误:无效操作数
结果=结果+argv[0]+“”//案例2:工作正常
看起来上面的加法语句不相等。
我认为在案例1中,argc[0]+''被视为(argv[0]+'')我的理解正确吗?
有人能解释一下这种行为吗?你的理解是正确的。这就是为什么案例1失败的原因,因为您无法将
运算符+
应用于常量字符[]
和常量字符[]
运算符+
是从左到右关联的,所以让我们从假设a+b+c
是(a+b)+c
开始。您可以忽略示例中的=
和+=
运算符,因为它们稍后才起作用
这里的问题是因为argv[0]
是一个char*
,而不是std::string
,所以要允许argv[0]+“
您需要一个不存在的免费操作符+(const char*,const char*)
另一方面,std::string
string::string& operator+(const char* s) const;
因此,您的第二个场景可以工作,因为它以一个
std::string
开始,并生成std::string
结果。/Case1:throws error:invalid operators
--编译器给您的是整个错误消息吗?否。确切的错误是“invalid operators of type'char*”和'const char[2]'对于binary operator+ok,您确实看到了您遗漏的错误消息部分是您问题的答案。是的。我的印象是,编译器会将result+=argv[0]+''视为result=result+argv[0]+''