Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ cpp中的字符串加法结合性_C++ - Fatal编程技术网

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]+''