关于模板函数的一些问题

程序员菜鸟 2018-01-17 08:30:31
#include <iostream>  

template <typename T, std::size_t Num>
T* begin(T (&Container)[Num]){
return Container;
}

template <typename T, std::size_t Num>
T* end(T (&Container)[Num]){
return (Container + Num);
}

int main(){
int num[] = {1,2,3,4,5,6};
std::cout << begin(num) <<": val is " << *begin(num) << std::endl;
std::cout << end(num) - 1 <<": val is " << *(end(num) - 1) << std::endl;
std::cout << end(num) << std::endl; //将打印最后一个元素后面的的地址
}

在上述代码里,调用begin(num)函数传入的到底是什么,是数组的地址?还是指向一个数组的指针。 如果是数组的地址,在函数定义的参数列表里为什么还要对
...全文
265 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jena_wy 2018-01-18
  • 打赏
  • 举报
回复
传的是地址的引用
棉猴 2018-01-17
  • 打赏
  • 举报
回复
《C++中模板函数及模板类的使用(上)》 http://blog.csdn.net/hou09tian/article/details/69367502 《C++中模板函数及模板类的使用(下)》 http://blog.csdn.net/hou09tian/article/details/69367514 希望能帮到你
yshuise 2018-01-17
  • 打赏
  • 举报
回复
数组会退化成指针
paschen 版主 2018-01-17
  • 打赏
  • 举报
回复
传入的是数组的引用,Num会自动推断出为6(6个元素),T则为int
真相重于对错 2018-01-17
  • 打赏
  • 举报
回复
因为 int num[] = {1,2,3,4,5,6};
begin(T (&Container)[Num]){
注意Container是个数组,如果num[size]是]带入到模板参数数是自动的把size带入为模板参数Num 不知我讲的你能听懂否?

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧