如何在c ++中将默认参数设置为类对象?

Var*_*yas 9 c++

我想设置我的函数与类对象参数设置为默认值.但是当我尝试这样做时,编译失败了.

class base {
 // ...
};

int myfunc(int a, base b = NULL) {
    if (NULL = b) {
        // DO SOMETHING
    } else {
    // DO SOMETHING
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里,当我尝试编译它时,这给了我"默认参数base b int int type"的错误

Luc*_*ore 20

对象不能NULL在C++中.

要将参数设置为默认值,只需使用:

int myfunc(int a, base b = base())
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下,由于无法将 `base` 与 `NULL` 进行比较,如何检查是否提供了参数? (3认同)

ten*_*our 14

这里有三个明显的选择.

首先,使用重载,以便调用者可以选择是否通过b.

int myfunc(int a) { ... }
int myfunc(int a, base& b) { ... }
Run Code Online (Sandbox Code Playgroud)

这样您就可以b在不必使用指针的情况下通过.请注意,您应该创建b引用或指针类型以避免切片对象.

其次,如果您不想要2个单独的实现,请创建b一个可以设置为的指针NULL.

int myfunc(int a, base* b = NULL) { ... }
Run Code Online (Sandbox Code Playgroud)

第三,你可以用一些东西来封装可空的概念,比如boost::optional.

int myfunc(int a, boost::optional<base&> b = boost::optional<base&>()) { ... }
Run Code Online (Sandbox Code Playgroud)