在C++中引用具有默认值的函数的参数

Sun*_*een 4 c++ arguments visual-c++

可能重复:
在C++中通过引用传递时参数的默认值

有可能做这样的事情:

// definition
bool MyFun(int nMyInt, char* szMyChar, double& nMyReferencedDouble = 0.0);
Run Code Online (Sandbox Code Playgroud)

然后可以像这样调用该函数:

MyFun(nMyInt, szMyChar, nMyReferencedDouble);
Run Code Online (Sandbox Code Playgroud)

或者像这样:

MyFun(nMyInt, szMyChar);
Run Code Online (Sandbox Code Playgroud)

我的编译器(VS 98)抱怨.有没有办法做到这一点?

CB *_*ley 8

由于只能将临时对象绑定到const引用,而常量表达式默认参数转换为临时对象,因此只能使用作为const引用的参数来执行此操作.

但是,您可以重载该函数,并使没有引用的函数创建一个本地命名对象,并将其传递给带有额外引用参数的重载.

实际上,我所说的并不完全正确.默认参数类似于参数的初始化器,因此如果您有一个合适的非const double可用,则可以将其绑定到reference参数.

例如

extern double dflt;
bool MyFun(int nMyInt, char* szMyChar, double& nMyReferencedDouble = dflt);
Run Code Online (Sandbox Code Playgroud)


Joe*_*Joe 5

你可以重载这个函数.

// Definition
bool MyFun(int nMyInt, char* szMyChar, double& nMyReferencedDouble);

// Overload
bool MyFun(int nMyInt, char* szMyChar)
{
    double nMyReferencedDouble = 0.0;
    MyFun( nMyInt, szMyChar, nMyReferencedDouble );
}
Run Code Online (Sandbox Code Playgroud)

这就是你如何解决C#中没有默认值的当前限制,并且同样适用于C++中的语义限制.