函数调用的结果可以用作默认参数值吗?

TJ *_*oks 6 c++ parameters default-value

是否有一个很好的方法来编写带有函数调用的默认参数的C/C++函数头?

我有一些功能的标题:

int foo(int x, int y = 0);
Run Code Online (Sandbox Code Playgroud)

我在一个大型代码库中工作,其中许多函数调用此函数并依赖于此默认值.此默认值现在需要更改为动态的东西,我正在寻找一种方法:

int foo(int x, int y = bar());
Run Code Online (Sandbox Code Playgroud)

其中bar()是一些根据某些系统参数生成默认值的函数.或者,这个函数原型看起来像:

int foo(int x, int y = baz.bar());
Run Code Online (Sandbox Code Playgroud)

其中baz是属于未在头文件中实例化的对象的函数.

Dim*_*ima 7

去搞清楚!它确实有效.C++函数中的默认参数


小智 7

我会使用两个重载函数:

int foo(int x, int y);

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

如果允许内联转发功能,则性能损失可能小到零.如果你在非头文件中保持它的主体不在线,可能会有性能成本(可能很小),但实现的灵活性更高,耦合也更少.


Lev*_*Lev 6

是.你写的是什么.


use*_*714 6

简单地删除第一个声明中的可选参数并提供单个参数重载有什么问题?

int foo(int x)
{
    Bar bar = //whatever initialization
    return foo(x,bar.baz());
}

int foo(int x,int y)
{
  //whatever the implementation is right now
}
Run Code Online (Sandbox Code Playgroud)

我认为这比尝试使用一些动态默认值更清晰,更灵活.