在C ++中声明const指针是否常见?

时间:2019-05-08 12:32:26

标签: c++ coding-style

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

T* const pObject = new T();

似乎C ++开发人员通常在使用指针的情况下不遵循此规则,是吗?

4 个答案:

答案 0 :(得分:8)

指针对象。

如果希望防止修改指针持有的值,即使其在其生存期内仅持有一个地址,则可以将其设为const。适用于任何其他对象类型的相同考虑因素也适用于此。

我怀疑您可能看不到它的原因是C ++的声明符语法有点不方便键入。更不用说 pointee 是否为const通常更重要。

答案 1 :(得分:4)

是的,这是一个好习惯,因为它可以避免您无意间更改参考。您有可能可以在代码中的某个位置更改变量的值,而不必故意添加const来确保所赋值的变量在任何地方都没有更改。

答案 2 :(得分:3)

指针只是一个包含地址的变量,但最终它是一个和其他变量一样的变量。

出于创建简单的<Button Name="btn"> <TextBlock Text="Add Flavor"> <TextBlock.Style> <Style TargetType="TextBlock"> <Style.Triggers> <DataTrigger Binding="{Binding ElementName=btn, Path=IsMouseOver}" Value="True"> <Setter Property="Foreground" Value="Red"/> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock> </Button> const的相同原因,应创建指针int。因此,如果您有充分的理由拥有普通变量const,则出于同样的原因,您也应该以拥有const指针为目标。

在C ++社区中,很普遍(我想补充,好的做法)是声明const指向const数据的指针。

答案 3 :(得分:3)

  

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

它不像非const指针那样普遍(不要与指向const的指针和指向非const的指针相混淆;只是要清楚一点)。指针通常用作数组的迭代器。迭代需要修改迭代器。

但这都不是闻所未闻的。

T* const pObject = new T();

任何体面的编码风格都主要建议不要使用裸机指针。

  

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

很少在某个时刻不重新分配指针是非常罕见的。除非您需要指向null的能力,否则通常建议在不需要重新分配时使用引用。

即使在您确实需要指针并且不需要重新分配的情况下,更喜欢使用const对象而不是非const只是勉强有用的样式指南。在现在被constexpr取代的情况下(这使得变量隐式为const),这大有不同。因此,许多人不遵循,甚至可能不了解这种风格。

但是,如果您愿意,可以随时遵循样式。