gpt4 book ai didi

c++ - 使用默认函数参数的优点

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:58:45 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com