Max*_*xpm 2 c++ methods const class const-correctness
假设我有这样一个类:
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;
}
};
Run Code Online (Sandbox Code Playgroud)
这不会编译,因为该const方法Get使用GetNodeReference,这不能是const因为它返回一个引用.
我该如何解决这个问题?
我不确定你想要实现什么,但你可以提供两个重载GetNodeReference:
Node& GetNodeReference(std::size_t Index)
{
// ...
return NodeReference;
}
const Node& GetNodeReference(std::size_t Index) const
{
// ...
return NodeReference;
}
Run Code Online (Sandbox Code Playgroud)
请注意,第二个重载有两个const修改器,一个在返回类型的行的开头,另一个在隐式传递的*this对象的行的末尾.
为避免代码重复,您可以基于const重载实现非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));
}
Run Code Online (Sandbox Code Playgroud)
Scott Meyers 在Effective C++的第3项中讨论了这种技术.
| 归档时间: |
|
| 查看次数: |
153 次 |
| 最近记录: |