您在常量
方面做了多大的工作?您只是在必要时创建函数const
,还是全身心地使用它?例如,想象一个简单的赋值器,它接受一个布尔参数:
void SetValue(const bool b) { my_val_ = b; }
常量
实际上有用吗?我个人选择广泛使用它,包括参数,但在这种情况下,我想知道它是否值得?
我还惊讶地发现,您可以从函数声明中的参数中省略const
,但可以将其包含在函数定义中,例如:
。h文件
void func(int n, long l);
。cpp文件
void func(const int n, const long l)
这是有原因的吗?在我看来有点不寻常。
原因是参数的const
只在函数中本地应用,因为它处理的是数据的副本。这意味着函数签名实际上是一样的。不过,经常这样做可能是不好的作风。
我个人倾向于不使用常量
,除了引用和指针参数。对于复制的对象,这并不重要,尽管它可以更安全,因为它在函数中发出意图的信号。这真的是个判断。我确实倾向于使用const_iterator
,但是当对某个对象进行循环时,我不打算修改它,所以我猜只要严格维护了引用类型的const
的正确性,每个对象都是自己的。
当参数通过值传递时,const
是没有意义的,因为您不会修改调用方的对象。
错了。
它是关于自我记录代码和假设的。
如果您的代码有很多人在工作,并且您的功能非常重要,那么您应该尽可能地标记const
任何和所有内容。在编写工业级代码时,您应该始终假设您的同事都是想方设法让您得逞的精神病患者(尤其是因为将来往往是您自己)。
此外,正如前面有人提到的,它可能会帮助编译器优化一些事情(尽管这是一个很长的机会)。
有时候(太频繁了!)我必须解开别人的C++代码。我们都知道,别人的C++代码几乎从定义上来说就是一团糟:)所以我要破译本地数据流的第一件事就是在每个变量定义中加入const,直到编译器开始乱叫。这意味着const也限定值参数,因为它们只是被调用者初始化的花哨的本地变量。
啊,我希望变量默认情况下是const,而非const变量需要mutable:)