请教一个关于函数模板推断的问题

master_fengj 2010-04-14 11:53:54

//有这么一个函数模板定义 :
template<typename T,int size>
int getSize(T (&)[size]){return size;}
//做如下调用,a_size结果为30,
//请问模板定义中"T (&)[size]"怎么理解,怎么理解a_size=30这样的模板推断结果?
main()
{
int a[30];
int a_size=getSize(a);
}

...全文
69 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
CVA4508M 2010-04-15
  • 打赏
  • 举报
回复
在你的代码里传入参数是a, 即类型是 int [30]
T (&)[size]展开后的类型是 int (&)[30]
也就是 int [30]的引用罗
macrojj 2010-04-15
  • 打赏
  • 举报
回复
学习了。
pengzhixi 2010-04-15
  • 打赏
  • 举报
回复
你这个是非类型模板参数。编译期确定,不需要推断了。
pengzhixi 2010-04-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 master_fengj 的回复:]
C/C++ code

//有这么一个函数模板定义 :
template<typename T,int size>
int getSize(T (&)[size]){return size;}
//做如下调用,a_size结果为30,
//请问模板定义中"T (&)[size]"怎么理解,怎么理解a_size=30这样的模板推断结果?
main()
{
i……
[/Quote]

a_size是不需要推断的,这个编译期就可以确定的。
weixiaoshashou 2010-04-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cva4508m 的回复:]
顺带写了个模板展开后的版本给楼主看看

C/C++ code

1
2 #include <iostream>
3
4 template<int size>
5 int getSize(int (&)[size]){return size;}
6
7 int main()
8 {
9 int a[30];
10 ……
[/Quote]
这个能行吗?
要通过编译链接才知道
CVA4508M 2010-04-15
  • 打赏
  • 举报
回复
顺带写了个模板展开后的版本给楼主看看

1
2 #include <iostream>
3
4 template<int size>
5 int getSize(int (&)[size]){return size;}
6
7 int main()
8 {
9 int a[30];
10 int a_size = getSize(a);
11 std::cout << a_size << std::endl;
12 }

64,650

社区成员

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

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