【问题标题】:How can you give a default value for a vector parameter in a function如何为函数中的向量参数提供默认值
【发布时间】:2014-02-01 05:19:05
【问题描述】:

以下面的示例代码为例:

typedef std::vector<uint8_t> uint8Vect_t;

void setSomeThing(int value, uint8Vect parameters)
{
    //... do some stuff ...
    if (parameters.size() > 0)
    {
        //... do some stuff with parameters ...
    }
}

int main(void)
{
    uint8Vect intParams;
    intParams.push_back(1);
    intParams.push_back(2);

    // Case 1 - pass parameters
    setSomeThing(1, intParams);

    // Case 2 - pass no parameters, default value should be used
    setSomeThing(1);

    return 0;
}

我的问题是我想为函数的向量参数设置一个默认值,如下所示:

setSomeThing(int value, uint8Vect parameters = 0)

如果没有传入参数“parameters”,则默认使用空向量。但是我无法弄清楚语法应该是什么 - 如果可能的话。我知道我可以使用重载函数,但我还是想知道如何做到这一点。

【问题讨论】:

  • 你试过setSomeThing(int value, uint8Vect parameters = 0)吗?
  • @LuchianGrigore err...不,我不想这样做,因为它似乎是错误的! :o

标签: c++ vector default-value


【解决方案1】:

类似这样的:

void setSomeThing(int value, uint8Vect_t parameters = uint8Vect_t()) { .... }

【讨论】:

    【解决方案2】:

    调用默认构造函数将构造一个空向量。

    #include <vector>
    typedef std::vector<uint8_t> uint8Vect_t;
    void setSomeThing(int value, uint8Vect_t parameters = uint8Vect_t{})
    {
        if (parameters.size() > 0)
        {
    
        }
    }
    

    【讨论】:

    • 这种方法更好,因为你可以创建一个自定义的默认向量,你可以使用任何你想要的值。但它需要 C++11
    • 非常感谢。是的,我想说这适用于 c++11,但不适用于 c99 - 我没有指定我使用的是哪个 :)
    • @Davidbrcz 不一定“更好”。创建一个自定义大小为 500 并将值设置为 42 的向量会非常乏味。
    • @Davidbrcz 我的答案和 juanchopanza 的答案之间的唯一区别是我修复了 op 代码上的一些拼写错误。
    • 如果使用 C++11,即使uint8Vect_t parameters = {} 的工作方式也一样。
    【解决方案3】:

    如果使用 C++11,即使 uint8Vect_t parameters = {} 也可以工作 - comment chris

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-08
      • 2018-01-01
      • 2013-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多