当前位置: 首页 > news >正文

如何提升网站访问速度全球网站排名前100

如何提升网站访问速度,全球网站排名前100,招聘网站建设价格,如何做英文网站推广16.3 重载与模板 函数模板可以被另一个模板或一个普通分模板函数重载。与往常一样#xff0c;名字相同的函数必须具有不同数量或类型的参数#xff08;这样才可以完成重载#xff09;。 如果设计模板#xff0c;则函数的匹配规则与普通函数的重载有所不同#xff0c;具体…16.3 重载与模板 函数模板可以被另一个模板或一个普通分模板函数重载。与往常一样名字相同的函数必须具有不同数量或类型的参数这样才可以完成重载。 如果设计模板则函数的匹配规则与普通函数的重载有所不同具体来说当涉及模板时 对于一个调用其候选函数包括所有模板实参推断成功的函数模板实例候选的函数模板总是可行的因为模板实参推断会排除任何不可行的模板与往常一样可行函数模板与非模板按类型转换如果对此调用需要的话来排序与往常一样如果恰有一个函数提供比任何其它函数都更好的匹配则选择此函数。如果出现多个匹配则选择更好的那一个。如果有多个更好的则此调用有歧义。 编写重载模板 下例构造一组函数命名为 debug_rep每个函数返回一个给定对象的 string 表示。 首先编写该函数最通用的版本将它定义为一个模板接受一个 const 对象的引用 template typename T string debug_rep(const T t) {ostringstream ret;ret t;return ret.str(); }接下来定义打印指针的 debug_rep 版本 template typename T string debug_rep(T *p) {ostringstream ret;ret pointer: p; // 打印指针的值if(p) {ret debug_rep(*p); // 打印 p 指向的值 } else {ret null pointer; // 或打印为空指针}return ret.str(); }调用上述的两个函数 string s(hi!); cout debug_rep(s) endl; // 调用第一个版本的 debug_rep, 实参是 string cout debug_rep(s) endl; // 调用第二个版本的 debug_rep, 实参是 string*对于第二个函数调用编译器将会生成两种版本的模板函数实例实际上第二个函数调用可以与上述两个模板函数都进行绑定实例化的结果如下 debug_rep(const string*); // 由第一个版本的 debug_rep 实例化而来, T 被绑定到 string* debug_rep(string*); // 由第二个版本的 debug_rep 实例化而来, T 被绑定到 string第二个实例化的结果是第二个函数调用的精准匹配。 多个可行模板 另一个例子进行如下调用 const string *sp s; cout debug_rep(sp) endl;对于这个例子上述两个版本的模板都是可行的而且两个都是精准匹配。 在此情况下正常的函数匹配规则无法区分这两个函数但根据重载函数模板的特殊规则此调用被解析为debug_rep(T*)即更特例化的版本。debug_rep(const T)本质上适用于任何类型包括指针类型它比debug_rep(T*)更加通用后者只能由于指针类型。因此用自己的话说就是重载模板匹配的规则大概可以概括为当存在多个适配的函数匹配时选择最不通用最没有歧义最匹配的那一个。 非模板和模板重载 这个例子定义一个普通非模板的 debug_rep 来打印双引号包围的 string string debug_rep(const string s) {return s ; }调用时 string s(hi!); cout debug_rep(s) endl;有两个同样好的可行函数 debug_repstring(const string); // 第一个模板, T 绑定到 string* debug_rep(const string); // 普通非模板函数显然二者提供相同的参数列表可以认为二者提供同样好的匹配。但是根据编译器的规则它将会选择非模板的版本进行匹配。当存在多个同样好的函数模板时编译器选择最特例化的版本处于同样的原因一个非模板会比一个函数模板更好。 重载模板和类型转换 对于 C 风格字符串指针以及字符串字面常量考虑如下调用 cout debug_rep(hi world!) endl; // 调用 debug_rep(T*)本例中所有三个 debug_rep 都是可行的 debug_rep(const T); // T 绑定到 char[10] debug_rep(T*); // T 绑定到 const char debug_rep(const string); // 要求从 const char* 到 string 的类型转换对于给定的实参两个模板都提供精确匹配——第二个模板需要进行一次许可的数组到指针的转换而对于函数匹配来说这种转换被认为是精确匹配。非模板版本是可行的但需要进行一次用户定义的类型转换。与之前一样T*版本更加特例化编译器会选择它。 如果我们希望字符指针按照 string 处理可以定义另外两个非模板重载版本 string debug_rep(char *p) {return debug_rep(string(p)); } string debug_rep(const char *p) {return debug_rep(string(p)); }缺少声明可能导致程序行为异常 值得注意的是为了使 char * 版本的 debug_rep 正确工作在定义此版本时debug_rep(const string)的声明必须在作用域中。否则就有可能调用错误的 debug_rep 版本比如模板实例化的版本 templatetypename T string debug_rep(const T t); templatetypename T string debug_rep(T *p); string debug_rep(const string); string debug_rep(char *p) {// 如果第三个函数声明不在当前作用域中, 那么下面的 debug_rep 将调用 debug_rep(const T)实例化的版本return debug_rep(string(p)); }在定义任何函数之前记得声明所有重载的函数版本。这样就不用担心编译器由于未遇到你希望调用的函数而实例化一个并非你需要的版本。
http://www.hkea.cn/news/14583935/

相关文章:

  • 腾讯做的导购网站长尾关键词举例
  • 专业建筑设计网站平台手机兼职的正规平台有哪些
  • 门店设计方案厦门seo推广公司
  • 计算机网站建设的能力网络推广工作任务
  • 重庆企业网站排名优化方法厦门网站综合优化贵吗
  • 私人做网站建设宁波本地抖音seo推广
  • php网站容量自己搭建app托管平台
  • seo网站建站微信网页版登录手机版下载
  • 著名的深圳网站建设鞍山做网站或
  • 淮南家政网站建设地址网站开发视频会议插件
  • 网站建设长春网站建设公司易下拉软件
  • 医药公司网站建设珠宝网站开发的背景
  • 做得比较好的公司网站做网站哪个便宜
  • 网站建设风险评估个人网页模板免费下载
  • 网站域名解析页面太原网络广告公司
  • 企业网站建设成本qq刷网站空间
  • 网站的申请网站推广方案中评价效果是指
  • 大网站设计wordpress 如何去掉图片地址
  • 外链建设都需要带网站网址注册公司材料怎么准备
  • 做餐饮加盟的网站常州做半导体的公司
  • 社交网站做强自己做网站的步骤
  • 东莞网站建设用哪种好网站建设与管理插图
  • 上海网站建设收费小豹子韬韬是哪个网站做的
  • 永康电子商务网站建设公司网上怎么查公司信息
  • 怎么在网站空间上传文件p2p理财网站开发流程图
  • 做网站的html代码格式网页制作公司有哪些职位
  • 网站开发软件d网站网络推广
  • 网站免费推广平台php网站开发范例
  • 网站设计可以吗做一个网站花费多少钱
  • 有没有介绍做私家导游的网站东莞seo技术培训