2 guoyang9204 guoyang9204 于 2015.06.14 10:31 提问

C++函数模板传形参的问题

想麻烦问问看函数模板的形参到底应该什么时候传递const引用,什么时候使用复制。
例如:
template
void printl(Iterator v1, Iterator v2) //正确的
{
while(v1 != v2){
cout << *v1++ <<endl;
}

}

template
void printl(const Iterator &v1, const Iterator &v2) //错误的
{
while(v1 != v2){
cout << *v1++ <<endl;
}

}

主函数:
int main()
{
vector vec;
vec.push_back(1); vec.push_back(2); vec.push_back(3);
printl(vec.begin(),vec.end());
return 0;
}

为什么这里形参用迭代器的引用会出错呢。谢谢。

4个回答

caozhy
caozhy   Ds   Rxr 2015.06.14 10:36
已采纳

因为你有*v1++,这会修改迭代器,所以const就会报错。

guoyang9204
guoyang9204 明白了,谢谢啦。
2 年多之前 回复
codeforcer
codeforcer   2015.06.14 10:39

因为const限制了你v1、v2指针不变,而你使用*v1++改变了指针,所以自然报错了

guoyang9204
guoyang9204 明白了,采纳第一个的了。谢谢回复:D
2 年多之前 回复
henuyx
henuyx   2015.06.14 10:43

先 iter1 = vec.begin(); iter2 = vec.end();
然后再printl(iter1, iter2);

还有那个const去掉

看看行不行?

个人理解

cuiwei1026522829
cuiwei1026522829   Ds   Rxr 2015.06.14 15:06

来晚一步的结果,就是这样啊,学习了!

Csdn user default icon
上传中...
上传图片
插入图片