如何为函数中的向量参数提供默认值

Posted

技术标签:

【中文标题】如何为函数中的向量参数提供默认值【英文标题】: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 【参考方案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

【讨论】:

以上是关于如何为函数中的向量参数提供默认值的主要内容,如果未能解决你的问题,请参考以下文章

函数的默认参数值

主函数可以有默认参数值吗?

如何为laravel中的所有路由添加默认参数

如何为对象创建默认值? PHP

Android:如何为参数变量设置默认值

如何为javascript函数变量添加默认值? [复制]