我感到困惑的是,当我测试下面的代码时,编译器只允许使用顶级常量进行重载:
void foo(int);
void foo(const int);
int main() {
return 0;
}
这是编译结果:
g++ -O0 testoverloading3.cpp -lm -o testoverloading3 -g -Wall -lpthread -std=c++11
Compilation finished at Wed Jul 9 15:45:35
这与我的理解相矛盾,即顶级常量不应超载。 我在这里错过了一些设置吗?
答案 0 :(得分:6)
编译器会考虑这两个声明
void foo(int);
void foo(const int);
作为相同功能的声明。
根据C ++标准
- 参数声明仅在存在或不存在时有所不同 const和/或volatile的等价物。也就是说,const和 当时,将忽略每个参数类型的volatile类型说明符 确定正在声明,定义或调用哪个函数