【发布时间】:2020-02-09 13:15:00
【问题描述】:
我正在设计一个类,并且对 const 的正确性有些担心,但我认为我没有完全理解这个概念的真正含义。如果我存储一个指向非 const 类型的原始指针并希望为该指针提供 const 和非 const 访问器,这会破坏 const 正确性吗?
class A
{
public:
void SetCount(int* pCount)
{
m_pCount = pCount;
}
void GetCount(const int** ppCount) const
{
*ppCount = m_pCount;
}
void GetCount(int** ppCount) const
{
*ppCount = m_pCount;
}
private:
int* m_pCount = nullptr;
};
int main()
{
int count = 10;
A a;
a.SetCount(&count);
const int* pCountConst = nullptr;
a.GetCount(&pCountConst);
// Prints 10.
std::cout << *pCountConst << std::endl;
int* pCountNonConst = nullptr;
a.GetCount(&pCountNonConst);
(*pCountNonConst)++;
// Prints 11.
std::cout << *pCountConst << std::endl;
}
pCount 的类型是const int*,所以我们希望底层的int 一旦初始化就永远不会改变。在我看来,我们在这里打破了 const 正确性,这是真的吗?
【问题讨论】:
标签: c++ constants const-correctness