为什么这段代码编译顺利?
class myvector
{
public:
myvector()
{
begin = new double[10];
end = begin+10;
}
~myvector()
{
delete[] begin;
}
double *begin;
double *end;
};
class VectorWorker
{
public:
VectorWorker(){}
void doWork(const myvector *v)
{
for (int i=0;i<10;i++)
v->begin[i] = i; // I don't want this to compile! I'd prefer compiler says me I can't modify v->begin
}
void doWork2(const myvector *const v) const
{
for (int i=0;i<10;i++)
v->begin[i] = i; // I don't want this to compile! I'd prefer compiler says me I can't modify v->begin
}
void doWork3(const myvector &v)
{
for (int i=0;i<10;i++)
v.begin[i] = i; // I don't want this to compile! I'd prefer compiler says me I can't modify v->begin
}
};
int main(int, char*[])
{
myvector x;
VectorWorker work;
work.doWork(&x);
work.doWork2(&x);
work.doWork3(x);
return 0;
}
我希望将 const myvector *v
传递给 VectorWorker::doWork
方法,应该确保我保留 myvector
中的变量完好无损,但实际上它们被修改了。我如何确定 doWork
方法允许只读操作?
实际上我无法将 double *begin
和 double *end
变量修改为 const double *
因为它们来自第三方-党库。但是,即使通过 const pointer
,我如何确保它们在通过它们所属的类的实例时保持完好无损?
代码在coliru中可用:http://coliru.stacked-crooked.com/a/bb43fbebebdb5872
最佳答案
使用访问器:
class myvector
{
public:
//previous code
const double* get_begin() const { return begin; }
const double* get_end() const { return end; }
double* get_begin() { return begin; }
double* get_end() { return begin; }
private:
double *begin;
double *end;
};
关于c++ - 确保const指针成员变量的constness,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32370863/