gpt4 book ai didi

c++ - 在 const 方法中使用引用

转载 作者:太空狗 更新时间:2023-10-29 23:34:13 25 4
gpt4 key购买 nike

假设我有这样一个类:

class LinkedList
{
struct Node
{
int StoredValue;
// ...
};

Node& GetNodeReference(std::size_t Index)
{
// ...

return NodeReference;
}

public:

int Get(std::size_t Index) const
{
return GetNodeReference(Index).StoredValue;
}
};

这不会编译,因为 const 方法 Get 使用 GetNodeReference,它不能是 const 因为它返回一个引用。

我该如何解决这个问题?

最佳答案

我不确定你想要达到什么目的,但你可以提供 GetNodeReference 的两个重载:

Node& GetNodeReference(std::size_t Index)
{
// ...

return NodeReference;
}

const Node& GetNodeReference(std::size_t Index) const
{
// ...

return NodeReference;
}

请注意,第二个重载有两个 const 修饰符,一个在行首用于返回类型,一个在行尾用于隐式传递的 *this对象。

为了避免代码重复,可以在const重载的基础上实现non-const重载:

const Node& GetNodeReference(std::size_t Index) const
{
// ...

return NodeReference;
}

Node& GetNodeReference(std::size_t Index)
{
return const_cast<Node&>(static_cast<const LinkedList&>(*this).getNodeReference(Index));
}

此技术在 Scott Meyers 的 Effective C++ 的第 3 项中进行了讨论。

关于c++ - 在 const 方法中使用引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5118543/

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