是不是像“string& operator + =(const string& str)”这样的函数的参数类型令人困惑? (参考const)

时间:2015-05-06 16:23:22

标签: types compound-assignment

string& operator+= (const string& str);

当我们查看函数原型时,我们假设传入函数的字符串不会被更改,对吧?

但是,考虑一下情况:

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

实际上,字符串'str'已更改。 这种情况不是很奇怪吗?

将原型更改为更好吗?

string& operator+= (string& str);

我搜索了许多这样的来源和例子,但对大多数人来说似乎很正常。没有人问过这个问题,或者可能是我找不到的问题。(对不起,如果这是我的问题,很难为非母语人士找到合适的关键词)

1 个答案:

答案 0 :(得分:0)

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

另一方面,如果你声明对象本身是const,那么你可以保证(或多或少)它根本没有改变,因为试图将它作为非const参数传递将会失败