我感到困惑的是,当我测试下面的代码时,编译器只允许使用顶级常量进行重载:
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
这与我的理解相矛盾,即顶级常数不应超载.我在这里错过了一些设置吗?
编译器会考虑这两个声明
void foo(int); void foo(const int);
作为相同功能的声明.
根据C++标准
- 仅存在或不存在const和/或volatile的参数声明是等效的.也就是说,在确定声明,定义或调用哪个函数时,将忽略每个参数类型的const和volatile类型说明符