如何将const ref返回到struct对象,使其所有嵌套结构也只读?

时间:2011-04-09 00:04:58

标签: c++

如何防止嵌套结构中的所有成员变量不可修改?

typedef struct A  
{  
    int a;  
    int b;  
}A1;  

typedef struct B  
{  
    A1* objA;  
}B1;  

class C  
{  
public:  
    const B& GetB() const { return objB; }  
    PopulateB();  

private:  
    B objB;  
};  

int main()  
{  
    C objC;
    objC.PopulateB();  
    const B& objB2 = objC.GetB();  
    objB2.objA->a = 3; // compiler allows this  
}  

我只想要一个完全只读的结构,我希望这可以工作。 (在这种情况下是objB2)

3 个答案:

答案 0 :(得分:5)

指针是const。它指出的数据不是。这就是指针如何工作最好的解决方案是不暴露原始指针。 const引用上不允许使用非const访问器函数,因此可以避免棘手的间接。

顺便说一句,你不必像那样输入dede结构。这是一个C-ism。

答案 1 :(得分:4)

struct B中的指针类型指的是非const值,这是一个重要的定义。如果要控制访问权限,则应隐藏数据成员并提供访问者和更改者:

struct B
{
private:
    A1* objA;
public:
    A1 & a1() {return *objA;}
    A1 const & a1() const {return *objA;}
};

答案 2 :(得分:0)

您可以尝试:

typedef struct B  
{  
    const A1& objA;  
}B1;