gpt4 book ai didi

c++ - constness 是否应该传播到成员指针指针对象?

转载 作者:行者123 更新时间:2023-11-30 01:25:21 38 4
gpt4 key购买 nike

我有一个成员函数,声明为 const 并通过指针修改数据。这似乎具有误导性。我应该删除 const 关键字吗?

我想知道其他人如何在他们的代码中处理这种情况。人们只是添加评论来澄清发生了什么吗?他们不在成员函数中添加 const 关键字吗?也许是完全不同的东西?

如有任何建议,我们将不胜感激。

最佳答案

您基本上有两个选择:

深度常量:

class Foo
{
T * ptr;
public:
T & operator*() { return *ptr; }
T const & operator*() const { return *ptr; }
T * operator->() { return ptr; }
T const * operator->() const { return ptr; }
};

浅常量:

class Foo
{
T * ptr;
public:
T & operator*() const { return *ptr; }
T * operator->() const { return ptr; }
};

这真的取决于你,也取决于你类的目的。如果该类是一个智能指针,那么具有浅常量语义似乎是合理的,因为该类应该尽可能类似于原始指针(当然您可以有一个指向非常量指针的常量原始指针).

否则,您应该问问自己,为什么要公开对成员指针对象的访问权限。您当然有可能希望通过对您的类的常量引用来提供可变访问权限,但我认为这些是特殊且罕见的情况。首先,您的代码中实际上不应该有那么多原始指针。通过取消引用指针返回深度 const 引用应该没问题,但通常在更好封装的“getter”函数中隐藏类中有指针的事实,如 T const & get() const { return *指针;

关于c++ - constness 是否应该传播到成员指针指针对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12410872/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com