Tip of the Week #109: Meaningful const
in Function Declarations
Originally posted as totw/109 on 2016-01-14 By Greg Miller (jgm@google.com)
本文档将说明const在函数声明中何时有意义,当它毫无意义,最好省略。但是首先,让我们简要解释一下声明和定义这两个术语的含义。
考虑下面这段代码:
1 2 3 4 |
|
前两行是函数的声明,一个函数的声明就是告诉编译器这个函数的签名和返回类型。在上面的例子中,这个函数的签名是F(int)
。
函数参数类型的常量性将被忽略,因此前两个声明都是等效的。(具体细节见 "Overloadable declarations”)
上面例子中第三和第四行是函数的定义。一个函数的定义也是一个声明。但是定义包含了函数的实现。因此第三行是具有签名为F(int)
的函数定义。第四行也是
对相同函数F(int)
的定义。这将会导致链接时错误,因为多个函数声明是允许的,但是只能有一个定义。
尽管第三行和第四行都是相同函数的定义,但是他们的实现确实不同的,这取决于他们的声明方式。第三行的函数参数是int
(非const
),第四行的函数参数是const int
。
Meaningful const in Function Declarations
函数声明中并不是所有的const限制符都可以忽略,引用自C++
标准中的 "Overloadable声明"([over.load])。
在参数类型的const类型说明符很重要,可用于区分重载的函数声明