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

void func( int param1, bool param2=false){ ... }

此处为param2提供了默认值。是否有任何机制可以确定param2是否已显式设置为其默认值false还是已自动传递?换句话说,从函数func中,可以区分以下两个调用吗?我正在使用Microsoft Visual C++编译器。
func(1, false);


func(1);

最佳答案

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

void func(int param1, boost::optional<bool> param2=boost::none);

然后,您可以检查param2是否为空(它有自己的运算符bool)。如果已设置,则表示它已传入。调用站点的外观将与以前相同,因为可以从其值类型隐式构造一个可选项。

10-08 05:36