你经常声明你的函数是const吗?

时间:2010-03-10 07:19:27

标签: c++ const const-correctness

你觉得它有用吗?

7 个答案:

答案 0 :(得分:24)

每当您知道该方法不会改变对象的状态时,您应该将其声明为常量。

它有助于阅读您的代码。当你试图改变对象的状态时它会有所帮助 - 编译器会阻止你。

答案 1 :(得分:11)

尽可能经常。不需要更改数据成员的函数应声明为const。这使代码更容易理解,并可能提示编译器进行优化。

答案 2 :(得分:6)

当您拥有const对象时,编译器允许您调用的唯一方法是const关键字标记为安全的方法。实际上,只有成员方法才有意义const方法。

在C ++中,对象的每个方法都接收一个指向对象的隐式this指针; const方法只会收到const this指针。

答案 3 :(得分:3)

假设您正在讨论方法,例如:

struct Example {
  void f() const;
};

然后,如果它们应该在const对象上可调用,则该方法应该是const。

答案 4 :(得分:2)

经常不够......

虽然所有答案都是正确的,但如果您使用的库不是const correct,那么很难在所有使用它的地方使用const。

如果您的旧API采用 char * ,出于所有逻辑目的应该是 const char * ,那么您必须忘记代码中的const或者做一些丑陋的演员。在那种情况下,我忘了const。

答案 5 :(得分:1)

我几乎在每个机会都使用const,并且它提供了意图文档并强制遵守该意图。语言功能并没有比这更好,但const却奇怪地不受欢迎。 (现实似乎是大多数自称为C ++的程序员无法解释int*, int*const, const int*const int*const之间的区别。)

虽然它可能永远不会发生,因为它的'C'起源,我常常认为如果const是默认的,C ++将是一个更好的语言,并且需要自由地使用(例如)'var'或类似的关键字。允许变量的构造后修改。

答案 6 :(得分:0)

我曾经将函数声明为const但现在我很少再这样做了。

主要问题是,如果我想将函数从const更改为非const,则意味着调用该函数的所有其他const函数也需要更改为非const。

由于优化,这种情况比我想象的更频繁。例如,我有一个GetData()函数,它用于返回指向数据的指针,但后来我优化了只有在调用GetData()时才设置数据(这会改变对象的状态,所以它不再是const功能)。

对于可以在不改变对象状态的情况下进行一些计算的其他函数也是如此,但在某些时候,由于函数被多次调用并且是瓶颈,因此更有意义地缓存结果。

同样在实践中,至少在我的项目中,我认为将我的函数声明为const几乎没什么好处。