我有接受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]);
}
答案 0 :(得分:32)
仔细考虑vertex.push(vertex[0]);
。函数t
中的push
是vertex[0]
的常量引用。
但是在push_back
之后,向量的内容已经移动(由于内存重新分配),因此vector[0]
已移到其他位置。 t
现在是悬空参考。
那是未定义的行为。的动臂强>