gpt4 book ai didi

c++ - 返回 &const 或 *const? (c++)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:03:00 26 4
gpt4 key购买 nike

我有自己的类(class)“SomeObject”,有几个成员。

现在,我有另一个类“WorkingClass”包含此对象作为私有(private)成员。

我的问题是:我想为“SomeObject”创建一个 Getter,但我不想让任何人修改它。

哪种方式更好,1 或 2?

class WorkingClass
{
private:
SomeObject sObj;

public:
//... 1)
const SomeObject &const GetSomeObject()
{
return mousePosition;
}

//... 2)
const SomeObject *const GetSomeObject()
{
return &mouseMovement;
}
}

我知道你总是可以抛弃 const,但我仍然只是想让我的代码干净和故障安全

编辑:

那我还有一个问题。当我有一个智能指针成员并在类里面经常使用它时,突然希望有人有权读取一些值但仅此而已,这会是一个好的解决方案还是再次冗长?

class X
{
private:
boost::shared_ptr<SomeObject> sob

public:
const const & GetSomeObject()
{
return *sob.get();
}
}

返回一个“const boost::shared_ptr<...> GetX()”怎么样?它可能不是真正必要的,但仍然不是无用的,因为在这种情况下编译器会禁止 GetX().reset(..) ,并且如果没有 const boost::... 声明,这个无用的操作将被允许。还是我错了?

最佳答案

两者都不好:

  • const SomeObject &const 格式错误。您不能对引用进行常量限定。 (当然,您可以限定引用类型。)

  • const SomeObject *const 不必要地冗长。函数调用表达式 o.GetSomeObject() 是一个右值表达式,并且只有类类型的右值可以是 const 限定的。您也可以只说 const SomeObject*。 (const SomeObject *const 实际上会导致模板实例化问题,尽管此类问题很少见。)

至于选择指针返回还是引用返回,要看你是如何使用返回值的。两者在不同情况下都有意义。无论如何,您想要返回一个指向 const 对象的引用或指针,而不是一个 const 引用或一个 const 指针:

const SomeObject& GetSomeObject() { ... }
const SomeObject* GetSomeObject() { ... }

通常,最好返回一个引用。

关于c++ - 返回 &const 或 *const? (c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4532043/

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