我想知道为什么这些声明不起作用(不兼容)
void f(int); //p1
void f(const int);//p2
void f(int &);//p3
void f(const int &);//p4
如果我理解得很好,编译器将不会发现 (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
可能会更改,另请参见 this question用于放置 const
的位置。
关于c++ - c++中的模糊函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10122294/