C++ c+中的模糊函数+;

C++ c+中的模糊函数+;,c++,overloading,C++,Overloading,我想知道为什么这些声明不起作用(不兼容) 如果我理解得很好,编译器将不会发现(int&)和(const int&)之间的区别 如果我写f(12),它将无法在前两个声明之间进行选择。。 我说的对吗?p3和p4是完全明确和可区分的,p1和p2不是。(当然,p1/p2与p3和p4是有区别的。) 原因是值参数的顶级const在声明中是不可检测的,实际上是无用的。例如,您可以执行以下操作: void foo(int x); // declaration // ... void foo(const int

我想知道为什么这些声明不起作用(不兼容)

如果我理解得很好,编译器将不会发现(int&)和(const int&)之间的区别 如果我写f(12),它将无法在前两个声明之间进行选择。。
我说的对吗?

p3和p4是完全明确和可区分的,p1和p2不是。(当然,p1/p2与p3和p4是有区别的。)

原因是值参数的顶级
const
在声明中是不可检测的,实际上是无用的。例如,您可以执行以下操作:

void foo(int x); // declaration
// ...
void foo(const int x){
  // definition/implementation
}
const
这里是一个对调用方不重要的实现细节,因为您无论如何都要进行复制。这个副本也是它无法与
int
区分的原因,从调用方的角度看,它完全相同

请注意,
const int&r
没有顶级的
const
,它是指常量整数的引用(引用总是常量)。有关指针(如果未声明
const
,则可能会更改),请参见放置
const
的位置

void foo(int x); // declaration
// ...
void foo(const int x){
  // definition/implementation
}