在C++中声明常量指针是常见的吗?

4

C++风格指南强烈建议,如果我们不打算修改对象,则应将对象声明为const。因此,当我们声明指向不会被重新分配的对象/变量的指针时,应该将其声明为const:

T* const pObject = new T();

只是似乎 C++ 开发人员在指针方面通常不遵循这个规则,对吗?

我们是谁?我们受谁的指导? - molbdnilo
是的,我们应该声明它为常量。 - Galik
4个回答

8

指针是一个对象。

如果你希望防止指针所保存的值被修改,即在其生命周期内仅保留单个地址,则可以将其声明为const。这里适用于任何其他对象类型的相同考虑因素。

我猜想你可能不太常见到这种写法的原因是,在C++中,声明符语法有点难以输入。更不用说指向的对象是否为const通常更为重要了。


C++开发人员似乎在指针方面不遵循这个规则,是吗? - embedc
同样地,当传递给函数时,指针只是被复制,因此没有真正必要将其设为“const”。您也不会在函数参数中看到许多“const int”。 - Paul Evans
@user463035818 - 我的键盘上有一个弱 T。我需要一个新的。 - StoryTeller - Unslander Monica
1
@StoryTeller,这里有我为你准备的新鲜衬衫 tttttttttttttttttttttt ;) - 463035818_is_not_a_number

4

是的,这是一个好习惯,因为它可以避免你无意中更改你的引用。可能你在代码的某个地方不知情地更改了变量的值,但加上 const 就可以确保变量的值不会在任何地方被改变。


3

在C++中声明const指针很常见吗?

与非const指针相比,const指针并不是那么常见(不要与指向const和指向非const的指针混淆,为了清楚起见)。指针通常用作数组的迭代器。迭代需要修改迭代器。

但是const指针也不是闻所未闻的。

T* const pObject = new T();

任何合理的编码风格都会首要建议不要使用裸指针。

因此,当我们声明指向不会被重新分配的对象/变量的指针时,应该将其声明为const。

指针在某个时刻不被重新分配的情况非常少见。除非您需要指向 null 的能力,否则在不需要重新分配时使用引用通常是明智的选择。

即使在您需要指针但不需要重新分配的情况下,优先选择 const 对象而不是非 const 对象只是一种稍微有用的样式指南。这主要在现在已被 constexpr 替代的情况下有重大差异(它使变量隐式成为 const)。因此,许多人不遵循,甚至可能不知道这样的风格。

然而,如果您喜欢,可以随意遵循这种样式。


3
一个指针只是包含一个地址的变量,但最终它就像任何其他变量一样。你应该将指针声明为const,原因和将普通的int声明为const一样。所以如果你有好的理由将一个普通变量声明为const,那么出于同样的原因,你也应该考虑使用const指针。在C++社区中,声明指向const数据的const指针是相当常见的做法(我认为这是个好习惯)。

问题是:“在C++中声明const指针是否常见?” - embedc
1
@embedc 问题是:我们不应该声明它为const吗? - Davide Spataro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接