【发布时间】:2013-09-13 05:03:11
【问题描述】:
在 C++ 中,给出替代方案:
void fun(int arg1, int arg2opt = 0);
// vs.
void fun(int arg1, int arg2);
void fun(int arg1) {
fun(arg1, 0);
}
想要使用这个函数的用户代码有什么不同吗?也就是说,给定任何代码库,当我将第一个定义更改为第二个定义时,哪些代码构造会中断(在编译时或运行时)? (重载解析?名称查找?将fun 分配给函数指针?模板中的用法(std::function)?...)
或者这些在语义上是否相同? (我知道的here are some details 与这个问题无关)
【问题讨论】:
-
取决于您的“用户代码”在哪里。例如:考虑当“用户”是多态派生并且这些是虚拟成员时会发生什么。
-
@WhozCraig:是的,无论如何,虚函数显然是一个很难使用默认参数的野兽。
标签: c++ overloading default-arguments