c++ - 确保const指针成员变量的constness

标签 c++ pointers compiler-errors constants

为什么这段代码编译顺利?

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 *begindouble *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/

相关文章:

c++ - 访问包含它的 vector 元素时,类对象的运算符重载不起作用?

c++ - 使用address-of运算符来匹配指针参数类型?

c++ - 每次模拟正态分布都是一样的(C++)

c++ - C++中的指针分配是原子的吗?

java - 帮助 Java 泛型 : Cannot use "Object" as argument for "? extends Object"

C++ 从文本文件运行代码

c++ - 如何调用函数指针数组中的函数?

c - 分配大小为 char * 的内存有什么作用?

gcc - Clang 3.4 stdlib.h 编译错误

c# - 错误说 system.void 不能从 c# 使用