C++ C++;:禁止类更改指针成员变量指向的值

C++ C++;:禁止类更改指针成员变量指向的值,c++,pointers,constants,member-variables,C++,Pointers,Constants,Member Variables,如果标题听起来很深奥,我很抱歉,让我举一个例子来说明: class A { public: A(int *flag) : flag_(flag) {} void foo(); private: void bar(); int *flag_; }; 问题是:我可以阻止这个类更改flag\指向的值吗 注意:我在想,也许我想写一些类似于const int*flag,但我不想让flag指向的值“不可撤销地”为常量。在我的例子中,这个值是其他类的某个成员变量的值,可以更改

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

class A
{
public:
    A(int *flag) : flag_(flag) {}
    void foo();
private:
    void bar();
    int *flag_;
};
问题是:我可以阻止这个类更改flag\指向的值吗

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


谢谢你的见解

const int*flag
不会修改传入的实际变量的常量,它只定义如何使用flag_uu。无论你传递给A的构造函数什么,它的常量都不会改变。const不是一个运行时更改,它只是防止编码人员意外修改值的语法。你可以做得更好,让它成为
const int*const flag\ux将阻止修改*标志,标志将不可重新分配。

const int*标志
不会修改传入的实际变量的常量,它只定义如何使用flag_uu。无论你传递给A的构造函数什么,它的常量都不会改变。const不是一个运行时更改,它只是防止编码人员意外修改值的语法。你可以做得更好,让它成为
const int*const flag\ux将阻止修改*标志,标志将不可重新分配

问题是:我可以阻止这个类更改flag\指向的值吗

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

所以。。。你希望它是恒定的。。。除了你不知道的时候?不,我看不出解决办法。作为类维护者,您可以保持不变,即
标志
仅在X条件下更改

编辑:我想我误解你了。只需将指针设为常量(或它指向的常量)。这对另一个成员变量没有任何影响,它只是控制如何使用
字段

另一方面,存储另一个类的此成员的地址是否安全?如果另一个类的实例被移动(存储在任何向量中?在许多情况下它可能被移动,从而使指针无效),会发生什么情况?如果为实例分配了自动存储持续时间并超出范围,会发生什么情况?如果你真的需要的话,存储一个指针成员是很好的(你呢?),但是有一些事情你需要考虑。 问题是:我可以阻止这个类更改flag\指向的值吗

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

所以。。。你希望它是恒定的。。。除了你不知道的时候?不,我看不出解决办法。作为类维护者,您可以保持不变,即
标志
仅在X条件下更改

编辑:我想我误解你了。只需将指针设为常量(或它指向的常量)。这对另一个成员变量没有任何影响,它只是控制如何使用
字段


另一方面,存储另一个类的此成员的地址是否安全?如果另一个类的实例被移动(存储在任何向量中?在许多情况下它可能被移动,从而使指针无效),会发生什么情况?如果为实例分配了自动存储持续时间并超出范围,会发生什么情况?如果你真的需要的话,存储一个指针成员是很好的(你呢?),但是有一些事情你需要考虑。

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

,则不可以。但是,如果类A将标志指针声明为
const
,则修改该值不应影响另一个具有指向同一内存位置的指针的类。

int*标志是私有成员; 类的客户端用户无法更改指向的标志和标志

这是你的课。 不要设计编写任何代码,比如:*flag_uux=14


Scott Meyers的“高效c++”有几点你想知道的; 类的客户端用户无法更改指向的标志和标志

这是你的课。 不要设计编写任何代码,比如:*flag_uux=14


Scott Meyers的“高效c++”有几点你想知道的。

这是个好消息,不是吗。所以我想,如果我让我的类看起来非常相互依赖,比如,
class StupidFeatureofApplications{…const int*const mainWindow},这并不是一个很坏的做法。。。是吗?
关于类相互依赖性的讨论完全是另一回事,但是,是的,您在这里使用的语法是正确的。这个值必须在构造函数中赋值,否则将永远是一个不可赋值的无意义指针,这是个好消息,不是吗。所以我想,如果我让我的类看起来非常相互依赖,比如,
class StupidFeatureofApplications{…const int*const mainWindow},这并不是一个很坏的做法。。。是吗?
关于类相互依赖性的讨论完全是另一回事,但是,是的,您在这里使用的语法是正确的。这个值必须在构造函数中赋值,否则永远是一个不可赋值的无意义指针。我不确定我是否真的需要赋值,但它让我的生活变得非常简单。我会考虑的。@user1367124:只要你永远不需要解决一个问题