如何确定用户是否为默认参数指定了值?

时间:2016-08-18 10:01:09

标签: c++ function parameters optional-parameters default-arguments

我有一个带有默认参数的C ++函数。

在函数中,如果我发现此参数具有默认值,则可能存在两种可能性 - (A)用户调用此函数未提供此参数的值,因此分配了默认值(B)用户提供的此参数的默认值。

我需要能够区分这两种情况。这样做的最佳方式是什么?

3 个答案:

答案 0 :(得分:3)

AFAIK,编译器替换调用站点的默认参数。没有办法将其与提供完全相同参数的用户区分开来。

您可以使用两个不同的函数来区分这两种情况:一种具有您想要指定默认值的参数,另一种没有。

答案 1 :(得分:0)

使用重载函数。

void do_great()
{
    // default operation
}

void do_great(int value)
{
    // non-default operation
}

答案 2 :(得分:-2)

class A
{
private:
   const int _defaultValue = 0;

public:
   void function(int userValue = _defaultValue)
   {
      if (userValue != _defaultValue)
         ....;
      else
         ....;
....

功能相同:

namespace { const int defaultValue = 0; }
void function(int userValue = defaultValue);