函数更改const对象

时间:2015-10-21 12:05:26

标签: c++ const

我有接受const引用作为参数的函数。它不应该改变参数,但它确实(变量“_isVertex”)。怎么解决这个问题?这是代码:

#include <vector>
#include <iostream>

using namespace std;

class Element
{
public:
    bool isVertex() const
    { return _isVertex; };

private:
    bool _isVertex = true;
};

class ElementContainer : public vector <Element>
{
public:
    void push(const Element &t)
    {
        // here everything is fine
        cerr << t.isVertex() << ' ';
        push_back(t);
        // and here _isVertex is false, should be true!
        cerr << t.isVertex() << '\n';
    }
};

int main()
{
    ElementContainer vertex;

    vertex.push({});
    vertex.push(vertex[0]);
}

1 个答案:

答案 0 :(得分:32)

仔细考虑vertex.push(vertex[0]);。函数t中的pushvertex[0]的常量引用。

但是在push_back之后,向量的内容已经移动(由于内存重新分配),因此vector[0]已移到其他位置。 t现在是悬空参考

那是未定义的行为。的动臂