如何防止嵌套结构中的所有成员变量不可修改?
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)
答案 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;