【发布时间】:2016-04-20 12:28:52
【问题描述】:
假设我在 C++ 中使用以下 3 个签名定义了一些函数 f:
void f(int x) {}
void f(int& x) {}
void f(const int& x) {}
这些函数可以共存,因为它们的参数类型不同。
现在我运行以下代码:
int main {
int i = 3;
const int ci = 4;
f(3);
f(i);
f(ci);
}
C++ 如何知道在这种特定情况下要调用哪个重载函数?在 C++ 中编写重载函数以避免歧义的一般规则是什么(最佳实践?)。当前的 C++14 标准是否指定了任何特定规则?
【问题讨论】:
-
“在 C++ 中编写重载函数以避免歧义的一般规则是什么” 最好的规则是不要重载,除非它直观地对人类读者完全有意义。
-
我怀疑您是否实际测试过编译具有这些声明的代码。由于不明确的调用,至少 clang++ 和 g++ 都会出错。
标签: c++ overloading