记下以下C++代码:
#include <iostream>
using std::cout;
int foo (const int);
int main ()
{
cout << foo(3);
}
int foo (int a)
{
a++;
return a;
}
Run Code Online (Sandbox Code Playgroud)
请注意,原型foo()采用a const int并且定义采用int.这个编译没有任何错误......
为什么没有编译错误?
Bri*_*ndy 33
因为foo函数的调用者是否foo修改了它的变量副本并不重要.
特别是在C++ 03标准中,以下2个片段解释了为什么:
C++ 03 Section:13.2-1
如果两个函数声明属于同一作用域且具有等效的参数声明(13.1),则它们引用相同的函数.
C++ 03 Section:13.1-3
仅存在或不存在const和/或volatile的参数声明是等效的.仅以这种方式忽略参数类型规范最外层的const和volatile类型说明符; 埋在参数类型规范中的const和volatile类型说明符很重要,可用于区分重载的函数声明.
Jer*_*fin 13
顶级const(即,适用于传递的值,而不是它指向或引用的值)仅影响函数的实现,而不影响接口.编译器从接口角度(即调用端)忽略它,并仅在实现(即函数体中的代码)上强制执行它.
| 归档时间: |
|
| 查看次数: |
1702 次 |
| 最近记录: |