其他分享
首页 > 其他分享> > c – 如何设置依赖其他参数的参数默认值?

c – 如何设置依赖其他参数的参数默认值?

作者:互联网

以下代码按预期编译和工作.

#include <vector>

void function(std::vector<int> vec, int size=1);

int main(){
    std::vector<int> vec = {1,2,3};
    function(vec);
}


void function(std::vector<int> vec, int size){
    //code..
    return;
}

但是,我希望根据前一个参数推导出size参数的默认值.例如:

void function(std::vector<int> vec, int size=vec.size());

但是这会导致:
错误:局部变量’vec’可能不会出现在此上下文中

哪个并不让我感到惊讶;我假设它需要在编译时知道默认值.那么我是否将函数模板化?我如何使函数模板化,使参数仍为int,并且向量仍然是int的向量,并且size参数被推导为默认情况下传递的向量大小.

我不想在函数调用期间传递向量的大小.

解决方法:

如果你真的想要一个带有size参数的函数,并希望大小默认为向量大小(而不是仅仅将它作为局部变量),那么你可以用两个函数来解决这个问题.一个只取向量,一个取矢量和大小(没有默认值).然后单参数函数可以调用第二个.

所以

void function(const std::vector<int>& vec, const size_t size)
{
   ...
}

void function(const std::vector<int>& vec)
{
   function(vec, vec.size());
}

标签:c,c11,parameter-passing,parameters,default-value
来源: https://codeday.me/bug/20191007/1864343.html