是否允许使用不同于顶级常量的参数重载函数?

时间:2014-07-09 20:55:16

标签: c++

我感到困惑的是,当我测试下面的代码时,编译器只允许使用顶级常量进行重载:

    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

这与我的理解相矛盾,即顶级常量不应超载。 我在这里错过了一些设置吗?

1 个答案:

答案 0 :(得分:6)

编译器会考虑这两个声明

void foo(int);
void foo(const int);

作为相同功能的声明。

根据C ++标准

  

- 参数声明仅在存在或不存在时有所不同   const和/或volatile的等价物。也就是说,const和   当时,将忽略每个参数类型的volatile类型说明符   确定正在声明,定义或调用哪个函数