C++风格指南强烈建议,如果我们不打算修改对象,则应将对象声明为const。因此,当我们声明指向不会被重新分配的对象/变量的指针时,应该将其声明为const:
T* const pObject = new T();
只是似乎 C++ 开发人员在指针方面通常不遵循这个规则,对吗?
C++风格指南强烈建议,如果我们不打算修改对象,则应将对象声明为const。因此,当我们声明指向不会被重新分配的对象/变量的指针时,应该将其声明为const:
T* const pObject = new T();
指针是一个对象。
如果你希望防止指针所保存的值被修改,即在其生命周期内仅保留单个地址,则可以将其声明为const。这里适用于任何其他对象类型的相同考虑因素。
我猜想你可能不太常见到这种写法的原因是,在C++中,声明符语法有点难以输入。更不用说指向的对象是否为const通常更为重要了。
是的,这是一个好习惯,因为它可以避免你无意中更改你的引用。可能你在代码的某个地方不知情地更改了变量的值,但加上 const
就可以确保变量的值不会在任何地方被改变。
在C++中声明const指针很常见吗?
与非const指针相比,const指针并不是那么常见(不要与指向const和指向非const的指针混淆,为了清楚起见)。指针通常用作数组的迭代器。迭代需要修改迭代器。
但是const指针也不是闻所未闻的。
T* const pObject = new T();
任何合理的编码风格都会首要建议不要使用裸指针。
因此,当我们声明指向不会被重新分配的对象/变量的指针时,应该将其声明为const。
指针在某个时刻不被重新分配的情况非常少见。除非您需要指向 null 的能力,否则在不需要重新分配时使用引用通常是明智的选择。
即使在您需要指针但不需要重新分配的情况下,优先选择 const 对象而不是非 const 对象只是一种稍微有用的样式指南。这主要在现在已被 constexpr
替代的情况下有重大差异(它使变量隐式成为 const)。因此,许多人不遵循,甚至可能不知道这样的风格。
然而,如果您喜欢,可以随意遵循这种样式。
const
,原因和将普通的int
声明为const
一样。所以如果你有好的理由将一个普通变量声明为const
,那么出于同样的原因,你也应该考虑使用const
指针。在C++社区中,声明指向const
数据的const
指针是相当常见的做法(我认为这是个好习惯)。