gpt4 book ai didi

c++ - 如何处理(深度)嵌套函数调用中的默认值?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:15:49 27 4
gpt4 key购买 nike

假设有一个有默认值的函数:

int foo(int x=42);

如果这被其他人这样调用:

int bar(int x=42) { return foo(x); }
int moo(int x=42) { return bar(x); }

这当然只是一个人为的例子。但是,我有时也会遇到类似的情况。该参数只是从最高级别 (moo) 传递到最低级别,并且只有在那里它才被实际使用。这样做的坏处是,当我将 foo 更改为具有不同于 42 的默认值时,我将不得不搜索所有调用者并相应地更改默认值。

是否有一些模式/习语可以避免这种情况?

我想到的唯一简单的解决方案是

int bar()      { return foo(); }
int bar(int x) { return foo(x); }

但是,由于我有点懒惰,而且在实际代码中这会导致相当多的代码重复,因此我想避免这种情况。

最佳答案

我建议选择以下两个选项之一(正如您在其他答案中看到的那样 - 有更多可能的解决方案)。

  1. 重载你的函数
  2. 定义常量

因此,选项 1 如下所示:

int foo(int x=42);
int bar(int x) { return foo(x); }
int moo(int x) { return bar(x); }
int bar() { return foo(); }
int moo() { return bar(); }

而且,选项 2 会更短一些:

constexpr int FOO_DEFAULT = 42;
int foo(int x=FOO_DEFAULT);
int bar(int x=FOO_DEFAULT) { return foo(x); }
int moo(int x=FOO_DEFAULT) { return bar(x); }

对于具有少量默认值(例如一个默认值)的情况,我会使用选项 1,对于具有相当多默认值的情况,我会使用选项 2 - 比如 foo(int a, int b = 3, std::string c = "wow", float pi = 3.14)

关于c++ - 如何处理(深度)嵌套函数调用中的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38460227/

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