C++中vector作为函数参数不传模板参数报错是什么原因?
问题原因
std::vector是C++标准库提供的类模板,而非可直接使用的具体类型。模板本质是生成类型/函数的「蓝图」,使用时必须传入足够的模板参数,才能生成编译器可识别的具体类型。std::vector的模板定义至少要求1个必选参数,即容器存储的元素类型。你写vector<> v时,没有传入任何模板参数,不符合模板的参数数量要求,因此编译器直接抛出参数数量不匹配的错误。- 当你写成
vector<int> v时,相当于给模板传入了int作为元素类型参数,编译器可以基于模板生成对应的vector<int>具体类型,因此编译可以正常通过。
补充说明
如果你需要实现可接收任意元素类型vector的通用函数,应该把print定义为函数模板,写法如下:
template <typename T> void print(vector<T> v) { // 你的实现逻辑 }
这种写法不需要你手动指定参数类型,编译器会在调用函数时,根据你传入的实参自动推导T的具体类型。
注意:哪怕你使用支持C++17类模板参数推导(CTAD)的编译器,也不能在函数形参声明处写vector<> v,因为形参没有对应的初始化值,编译器无法推导模板参数的具体类型,依然会编译失败。
内容的提问来源于stack exchange,提问作者HeinrichZHM
相关产品推荐
相关产品推荐

