C ++:我应该在函数参数中尽可能多地使用常量吗?

时间:2010-12-14 23:54:05

标签: c++ standards constants

还是毫无意义?

感谢。

编辑:我已经看到char数组在函数参数中经常是常量的...这有什么原因吗?

编辑2:没关系我的编辑。见'In silico的回答。

编辑3:澄清,这是一个礼仪问题,而不是“将会发生什么”的问题。我理解const的作用。

3 个答案:

答案 0 :(得分:4)

考虑这个函数声明:

void Foo(const char* str);

这声明了一个名为foo的函数,它接受指向const char的指针。此上下文中的const表示该函数承诺不会更改str指向的内容。

它与const-correctness有关,是语言的基本组成部分。你不得不要求一些相对简单的事实意味着你应该去pick up a good C++ book并阅读它。您将更好地理解如何使用它以及为什么我们甚至为此烦恼。

另外,请阅读const-correctness herehere。同样,它是该语言的基本组成部分,如果您想要使用适当的C ++编写代码,请务必正确使用它。

答案 1 :(得分:0)

在处理引用(&)时使用const并且不打算更改参数。这是为了清楚地将它们标识为输入参数。性能也应该更好。还有数以千计的其他原因。它可能对价值移交的论据毫无用处,但也不会造成伤害。

答案 2 :(得分:0)

const是一个承诺,你不会改变有问题的东西。你可以使promises不改变参数,不改变指针指向的东西(或引用引用的东西),不改变this - 对象(在成员函数中),等等。返回值,“promise”绑定到调用者,所以实际上更像是你不允许调用者更改返回的东西。

这对于指针和引用更有用(特别是引用,因为在C ++中我们不希望通过指针传递,如果我们不需要)而不是值,因为按值传递会产生副本;调用者不关心被调用函数是否更改了自己的值副本。但是如果我们通过引用传递,const让我们知道函数不会通过引用更改我们的值。

类似地,当我们通过引用返回某些内容时,我们通常指的是一个预先存在的东西 - 也许最常见的是,我们通过引用从成员函数返回一些数据成员。在这种情况下,const会阻止调用者使用此引用来修改对象。这再次使得更容易推断代码的作用,并防止错误。通常看到成对的访问器函数:一个非const版本,一个const版本,其中返回值和this-object都是const。 (我们通过将const放在函数签名的 end 之后参数列表的右括号来创建this-object const。)含义: “调用此函数不会影响对象,只要调用者不通过返回的引用来改变对象”。如果调用者具有该类的const实例,则只能返回一个const引用。

有关详情,请阅读http://www.parashift.com/c++-faq-lite/const-correctness.html