【发布时间】:2013-11-18 18:54:21
【问题描述】:
以下代码按预期编译和工作。
#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 参数推断为传入的向量的大小。
我不想在函数调用期间传递向量的大小。
【问题讨论】:
-
I assume it needs to know the default value at compile time,这不是真的,实际上你可以使用全局变量作为默认参数,但是因为函数参数评估顺序没有定义,C++标准明确禁止访问评估默认值时的参数。
标签: c++ c++11 parameters parameter-passing default-value