int add (int x, int y=1)
int main ()
{
int result1 = add(5);
int result2 = add(5, 3);
result 0;
}
对比
int add (int x, int y)
int main ()
{
int result1 = add(5, 1);
int result2 = add(5, 3);
result 0;
}
在执行速度、内存使用等方面,使用默认函数参数有什么优势?对于像我这样的初学者,在意识到默认函数参数的这种用法之前,我有时会感到困惑;没有默认函数参数的编码不是更容易阅读代码吗?
最佳答案
您的 add 函数不是如何使用默认参数的好示例,您是正确的,使用默认参数更难阅读。
但是,并非所有功能都如此。考虑 std::vector::resize,它看起来像:
template<class T>
struct vector_imitation {
void resize(int new_size, T new_values=T());
};
这里,在不提供值的情况下调整大小使用 T()。这是一个很常见的情况,我相信几乎每个人都觉得 resize 的单参数调用很容易理解:
vector_imitation<int> v; // [] (v is empty)
v.resize(3); // [0, 0, 0] (since int() == 0)
v.resize(5, 42); // [0, 0, 0, 42, 42]
即使从不需要构造 new_value 参数:当调整到较小的尺寸时。因此对于某些函数,重载比默认参数更好。 (我会将 vector::resize 包括在这个类别中。)例如,std::getline 以这种方式工作,尽管它没有其他选择,因为第三个参数的“默认”值是根据第一个参数计算的。像这样的东西:
template<class Stream, class String, class Delim>
Stream& getline_imitation(Stream &in, String &out, Delim delim);
template<class Stream, class String>
Stream& getline_imitation(Stream &in, String &out) {
return getline_imitation(in, out, in.widen('\n'));
}
如果您可以为函数提供命名参数,则默认参数会更有用,但 C++ 并没有使这变得容易。如果您在其他语言中遇到过默认参数,则需要牢记此 C++ 限制。例如,想象一个函数:
void f(int a=1, int b=2);
如果您还对所有后续参数使用给定的默认值,则只能对参数使用给定的默认值,而不是能够调用,例如:
f(b=42) // hypothetical equivalent to f(a=1, b=42), but not valid C++
关于c++ - 使用默认函数参数的优点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4755104/