2

如果标题听起来很深奥,我深表歉意,让我举个例子来说明一下:

class A
{
public:
    A(int *flag) : flag_(flag) {}
    void foo();
private:
    void bar();
    int *flag_;
};

问题是:我可以阻止此类更改 flag_ 指向的值吗?

注意:我在想,也许我想写一些类似的东西const int * flag_,但我不想让flag“不可撤销”指向的值保持不变。在我的例子中,这个值是某个其他类的某个成员变量的值,可以更改。

感谢您的见解!

4

4 回答 4

3

const int *flag_;不会修改传入的实际变量的常量,它只是定义如何使用 flag_。无论你传递给 A 的构造函数,它的常量都不会改变。const 不是运行时更改,它只是防止编码器意外修改值的语法。您可以做得更好,并使其const int *const flag_;阻止 A 修改 *flag_ 并且 flag_ 将不可重新分配。

于 2012-06-26T23:58:47.627 回答
1

问题是:我可以阻止此类更改 flag_ 指向的值吗?

注意:我在想,也许我想写一些类似 const int * flag_ 的东西,但我不想让 flag 指向的值“不可撤销地”保持不变。

所以......你希望它保持不变......除非你不这样做?不,我没有看到解决方案。flag_作为类维护者,您可以维护仅在 X 条件下更改的不变量。

编辑:我想我误解了你。只需制作指针const(或它指向的内容const)。这对其他成员变量没有任何影响,它只是控制如何field_使用。

顺便说一句,存储另一个类的这个成员的地址是否安全?如果另一个类的实例被移动(存储在任何向量中?在很多情况下它可以被移动,从而使您的指针无效)会发生什么?如果实例分配有自动存储持续时间并超出范围会怎样?如果您真的需要(是吗?)存储指针成员,这很好,但是您需要考虑一些事情。

于 2012-06-26T23:58:48.523 回答
0

不使用constthen no 你不能。但是,如果类 A 将标志指针声明为const,那应该不会影响另一个具有指向同一内存位置的指针的类修改值。

于 2012-06-27T00:00:46.880 回答
0

int* flag_,是私有成员;您班级的客户用户不能更改指向的 flag_ 和 flag_。

Now This is your class . Don't design to write any code like : *flag_=14;

The Scott Meyers's "Effective c++" has a few thing you want to know.

于 2012-06-27T03:08:32.247 回答