Types Isn';函数的t参数类型,如;弦乐;运算符+;=(const string&;str)";令人困惑(参考const)

Types Isn';函数的t参数类型,如;弦乐;运算符+;=(const string&;str)";令人困惑(参考const),types,compound-assignment,Types,Compound Assignment,当我们查看函数原型时,我们假设传递到函数中的字符串不会更改,对吗 但是,考虑一下情况: string& operator+= (const string& str); 实际上,字符串“str”已更改。 这种情况难道不奇怪吗 将原型更改为更好吗 string str("Example"); str += str; 我已经搜索了很多类似的来源和例子,但对大多数人来说这似乎很正常。没有人问这个问题,或者可能是我没有找到。(如果这是我的问题,很抱歉,为非母语人士找到合适的关键字太难了

当我们查看函数原型时,我们假设传递到函数中的字符串不会更改,对吗

但是,考虑一下情况:

string& operator+= (const string& str);
实际上,字符串“str”已更改。 这种情况难道不奇怪吗

将原型更改为更好吗

string str("Example");
str += str;

我已经搜索了很多类似的来源和例子,但对大多数人来说这似乎很正常。没有人问这个问题,或者可能是我没有找到。(如果这是我的问题,很抱歉,为非母语人士找到合适的关键字太难了)

const
并没有说函数参数根本无法修改。它只是说它不能通过该参数进行修改。如果您将特定对象作为常量和非常量参数传递,那么如果它发生变化,您几乎不会感到惊讶


另一方面,如果您将对象本身声明为常量,那么您可以保证(或多或少)它根本不会更改,因为尝试将其作为非常量参数传递将失败。

谢谢!!现在有道理了。
string& operator+= (string& str);