如何确定函数参数是自动设置为默认值还是在 C++ 中显式设置?

joh*_*een 5 c++ default-parameters

我很确定这是不可能的,但如果某种方式存在(可能通过编译器提供的宏),它对我来说非常有用,所以我在这里发布它。假设我有一个函数:

void func( int param1, bool param2=false){ ... }
Run Code Online (Sandbox Code Playgroud)

param2这里已经给出了默认值。是否有任何机制可以确定param2是明确设置为其默认值false还是自动传递?换句话说,从 function 内部func,是否可以区分以下两个调用?我正在使用 Microsoft Visual C++ 编译器。

func(1, false);
Run Code Online (Sandbox Code Playgroud)

func(1);
Run Code Online (Sandbox Code Playgroud)

Joh*_*nck 4

您无法区分您询问的方式,但您可以这样做:

void func(int param1, boost::optional<bool> param2=boost::none);
Run Code Online (Sandbox Code Playgroud)

然后你可以检查 param2 是否为 none (它有自己的运算符 bool)。如果它被设置,则意味着它已被传入。调用站点将看起来与以前相同,因为可以从其值类型隐式构造可选值。