C ++样式指南强烈建议,如果我们不打算修改对象,则应将对象声明为const。因此,当我们声明一个不会被重新分配的对象/变量的指针时,应将其声明为const:
T* const pObject = new T();
似乎C ++开发人员通常在使用指针的情况下不遵循此规则,是吗?
答案 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),这大有不同。因此,许多人不遵循,甚至可能不了解这种风格。
但是,如果您愿意,可以随时遵循样式。