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

C++ 是否允许使用顶级常量不同的参数重载函数?,c++,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

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

    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++标准

-仅在存在或不存在时不同的参数声明 常量和/或volatile是等效的。也就是说,const和 每个参数类型的易失性类型说明符在 确定要声明、定义或调用的函数


这些只是声明;尝试为每个函数定义一个主体,你会得到不同的编译结果…@OliCharlesworth,函数/变量可以声明多次但只能定义一次是真的吗?函数/变量可以声明多次但只能定义一次是真的吗?@MooingDuck Thx寻求建议。快速跟进:我尝试了另一个重复的声明
intget();双get()但收到警告。@user3792254内联函数可以定义多次。在每个翻译单元中都包含它们的定义。显然,OP的问题的答案是:不,这是不允许的,因为它们不会重载。它们将是同一函数的两个定义,因此违反了一个定义规则。