CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  工具平台和程序库

几个C++ PRIMER上的函数模板问题。

楼主THEBEST(你厉害!)2003-09-03 22:53:44 在 C/C++ / 工具平台和程序库 提问

1>  
  typedef   int   (&   rai)[10];  
  template   <class   T   >  
  T   min   (   T   (   &arr)[10]   );  
   
  int   array[10]={0};  
   
  min   (   array   );  
   
  问题:a>   第一个typedef是声明   rai   为有十个   int   型元素的数组的引用吗?为什么是这样声明呢?总是习惯   typedef   int   I   ;   之种形式的。  
  b>   模板函数的参数为数组的引用,实参应该给个数组吧?而我们传给它的是数组名,一个指针,如何解释呢?照我理解直接传个   array[10]   为何不可呢?  
  c>   顺便问一下,一个普通函数以数组的引用为开参,如何专给它实参呢?具体作何理解或解释?  
   
   
  2>  
  C++   PRIMER  
  P418。  
   
  template   <class   T1,   class   T2,   class   T3>  
  T1   sum   (   T2,   T3);  
   
  typedef   unsigned   int   ui_type;  
   
  P419:  
   
  ui_type   (*pf)   (char   ,   ui_type)   =   &   sum   <   ui_type   >;  
   
  问题:  
  为什么我不可能直接用:ui_type   (*pf)   (char   ,   ui_type)   =   &   sum   ;  
  呢?因为我认为   (*pf)前面的   ui_type   说明了这个指针指向的函数的返回类型,所以编译器可以根据这个来推演出模板参数   T1   ,然后生成实例。  
  而不用   ∑   <ui_type>   用<ui_type>来显示模板参数化来指明   T1。不是吗?  
   
   
  3>  
  P412:  
   
  template   <teypename   Type,   int   size>  
  Type   min   (Type   (   &r_array)   [size]  
  {   }  
  int   ia[   ]   =   {   10,   7   ,   8,   9,   4   };  
  ......................  
  #include   <iostream>  
  int   main   ()  
  {  
  ..............  
  int   i   =   min   (   ia   );  
  ..............  
  }  
   
  P414:  
   
  template   <class   Type,   int   size   >  
  Type   min   (Type   (   &r_array)[size]   )  
  {   }  
  void   f   (int   pval[9]   )  
  {  
  //   错误:   Type   (&)[   ]   !=   int   *  
  int   jval   =   min   (   pval   );  
  }  
   
  问题:  
  这两个例子不是一样的吗?为什么一个错误一个没有?  
  为什么它说   pval   是   int   *   型,而不是   int   型数组类型。那   p412   的那个例子为什么不是一样的吗?怎么解释?  
   
  问题点数:50、回复次数:6Top

1 楼aflyinghorse()回复于 2003-09-06 23:42:31 得分 10

第二个问题,函数的返回类型是不参加模版参数推演的  
  所以要显示指定  
   
  第三个问题  
  C++中数组作为参数都被看作指向第一个元素的指针  
  例如:f(int   a[]),   f(int   a[10])都被看作f(int   *)  
  即指向第一个元素的指针,而数组名才是数组类型Top

2 楼njSeeWhy(北海鲲鹏)回复于 2003-09-07 13:38:42 得分 0

你是在回答问题还是在提问题?Top

3 楼njSeeWhy(北海鲲鹏)回复于 2003-09-07 13:41:07 得分 0

不好意思,看错了。Top

4 楼ppby2002(lovewolf)回复于 2003-09-10 10:14:19 得分 15

第一个问题:  
  typedef   int   (&   rai)[10];  
  声明的是一个含有10个元素的整型数组引用,声明的一般形式是      
  T   (&   )[size]          
  其中size是引用数组的大小。  
  形参列表可以写为     fun(rai   arrayname){...}  
   
  还记得函数指针的一般形式么?  
  T   (*   )(T1,T2,...)  
  typedef   int(*PFV)(int,int);  
  则  
  int   fun(int   a   ,   int   b)  
  可以有  
  PFV   fp=fun;  
  :)  
  不知道我说明白没有啊  
   
  Top

5 楼Wolf0403(废人:独活十年~心如刀割)回复于 2003-09-10 19:33:35 得分 10

那么  
  void   fun(rai   arrayname){...}  
  在   fun   中,arrayname   是否自行退化成   int*   了呢?  
  Top

6 楼sevecol(sevecol.blogone.net)回复于 2003-09-10 19:42:15 得分 15

数组名退化成指针适应函数的参数是有条件的  
   
  当函数的参数类型是引用的时候,这种退化不会发生.Top

相关问题

  • 《C++Primer》函数模板习题的问题(100分)
  • 50分求解c++ primer中函数模板的问题
  • 关于c++ primer中关于模板成员函数的疑问
  • 初学者问题:C++函数模板
  • C++中函数模板和函数重载的关系
  • 模板函数
  • 函数模板
  • C++中如何在类外定义模板类内的模板函数?
  • C++模板判断函数是否被定义
  • C++类模板是否支持内联函数啊?

关键词

  • c++
  • 函数
  • 模板
  • 指针
  • template
  • 数组
  • 参数
  • 引用
  • rai
  • 退化

得分解答快速导航

  • 帖主:THEBEST
  • aflyinghorse
  • ppby2002
  • Wolf0403
  • sevecol

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo