此函数更改了成员函数的Const参数

时间:2014-02-01 05:01:05

标签: c++ arguments const

这是“Accelerated C ++”的示例,12.3.3。代码足够大,所以我只放在最低限度。为了模仿类字符串,实现了自定义类Str,其具有vector<char> data。运算符+ =重载:

Str& operator+=(const Str& s) {
    std::copy(s.data.begin(), s.data.end(), std::back_inserter(data));
    return *this;
}

这个运算符显然不能用于s += s;,它编译成功但产生垃圾(我相信作者的意图是去除额外的细节)。我的问题是为什么它可以编译 - 我们更改const参数的数据。我假设这是因为我们间接更改了数据:编译器无法知道datas.data相同。能否请你确认?如果是这种情况,那么问题与我的另一个问题非常相似: How const member function can change an object's data?我只想确定。

1 个答案:

答案 0 :(得分:0)

const引用可能引用非const对象,如果你s += s;会发生这种情况。在这种情况下,constness仅适用于通过该引用访问时的对象。这与你这样做是一回事:

Object non_const_object;
Object const & const_ref = non_const_object;

non_const_object.modify(); // okay
const_ref.modify();        // error, even though it's the same object