提问者:小点点

对函数参数使用“const”


您在常量方面做了多大的工作?您只是在必要时创建函数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)

这是有原因的吗?在我看来有点不寻常。


共3个答案

匿名用户

原因是参数的const只在函数中本地应用,因为它处理的是数据的副本。这意味着函数签名实际上是一样的。不过,经常这样做可能是不好的作风。

我个人倾向于不使用常量,除了引用和指针参数。对于复制的对象,这并不重要,尽管它可以更安全,因为它在函数中发出意图的信号。这真的是个判断。我确实倾向于使用const_iterator,但是当对某个对象进行循环时,我不打算修改它,所以我猜只要严格维护了引用类型的const的正确性,每个对象都是自己的。

匿名用户

当参数通过值传递时,const是没有意义的,因为您不会修改调用方的对象。

错了。

它是关于自我记录代码和假设的。

如果您的代码有很多人在工作,并且您的功能非常重要,那么您应该尽可能地标记const任何和所有内容。在编写工业级代码时,您应该始终假设您的同事都是想方设法让您得逞的精神病患者(尤其是因为将来往往是您自己)。

此外,正如前面有人提到的,它可能会帮助编译器优化一些事情(尽管这是一个很长的机会)。

匿名用户

有时候(太频繁了!)我必须解开别人的C++代码。我们都知道,别人的C++代码几乎从定义上来说就是一团糟:)所以我要破译本地数据流的第一件事就是在每个变量定义中加入const,直到编译器开始乱叫。这意味着const也限定值参数,因为它们只是被调用者初始化的花哨的本地变量。

啊,我希望变量默认情况下是const,而非const变量需要mutable:)