guoyang9204
guoyang9204
2015-06-14 02:31
采纳率: 100%
浏览 1.7k

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
    已采纳

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

    点赞 评论
  • codeforcer
    JinbaoSite0144 2015-06-14 02:39

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

    点赞 评论
  • henuyx
    Heart09 2015-06-14 02:43

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

    还有那个const去掉

    看看行不行?

    个人理解

    点赞 评论
  • cuiwei1026522829
    另一花生 2015-06-14 07:06

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

    点赞 评论

相关推荐