如何使用带有默认值的int&参数?

use*_*917 2 c++

我必须int&在头文件中的现有函数定义中添加一个默认参数(例如iNewArgument):

初始化最后一个参数以使其采用默认值的语法是什么?

..
virtual int ExecNew
    (int& param1, int& RowIn,int& RowOut, char* Msg = '0', 
            bool bDebug=true, int& iNewArgument = NULL ) = 0 ;
.
.
Run Code Online (Sandbox Code Playgroud)

NULL为#defined为0

错误:默认参数:无法转换intint&

Joh*_*itb 9

您的示例表明您正在创建虚拟功能.虚拟(特别是纯)函数中的默认参数不是一个好主意,因为在调用重写函数时不会考虑它们.

struct A {
  virtual void f(int = 4711) = 0;
};

struct B : A {
  virtual void f(int) { /* ... */ }
};
Run Code Online (Sandbox Code Playgroud)

现在,如果有人调用f一个B对象,他将不得不提供参数 - 不使用默认值.您必须复制派生类中的默认参数,这会创建丑陋的冗余.相反,您可以使用非虚拟接口模式

struct A {
  void f(int a) {
    int out;
    f(a, out);
  }

  void f(int a, int &out) {
    doF(a, out);
  }

protected:
  virtual void doF(int a, int out&) = 0;
};
Run Code Online (Sandbox Code Playgroud)

用户现在可以f使用一个,并且使用两个参数调用他调用函数的任何类类型,并且实现者A不必担心默认参数.通过使用重载而不是默认参数,您不需要围绕左值或临时值.