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

陕西省城乡住房建设部网站兰州seo公司

陕西省城乡住房建设部网站,兰州seo公司,江苏做网站公司有哪些,昆明网页设计培训机构模板的右尖括号 在 c98/03 的泛型编程中,模板实例化有一个很烦琐的地方,那就是连续两个右尖括号(>>)会被编译器解释成右移操作符,而不是模板参数表的结束,所以需要中间加个空格进行分割,…

模板的右尖括号

在 c++98/03 的泛型编程中,模板实例化有一个很烦琐的地方,那就是连续两个右尖括号(>>)会被编译器解释成右移操作符,而不是模板参数表的结束,所以需要中间加个空格进行分割,避免发生编译错误。

int main() {std::vector<std::vector<int>> a; // errorstd::vector<std::vector<int> > b; // ok
}

现在在 c++11 中,这种限制终于被取消了。在 c++11 标准中,要求编译器对模板的右尖括号做单独处理,使编译器能够正确判断出 >> 是一个右移操作符还是模板参数表的结束标记(delimiter,界定符)。

template <typename T>
struct Foo
{typedef T type;
};template <typename T>
class A
{// ...
};int main(void)
{Foo<A<int>>::type xx;  return 0;
}

模板的别名—using 定义别名

大家都知道,在 c++ 中可以通过 typedef 重定义一个类型,被重定义的类型并不是一个新的类型,仅仅只是原有的类型取了一个新的名字。但是使用 typedef 存在两个问题:

  • 对于复杂类型而言,使用 typedef 重定义相对繁琐;
  • typedef 的定义方法和变量的声明类似,这种写法凸显了 c/c++ 中的语法一致性,但有时却会增加代码的阅读难度;
  • typedef 无法重定义一个模板。

c++11 引入了 using,using 的别名语法覆盖了 typedef 的全部功能,可以轻松的定义别名而不是使用繁琐的 typedef。

typedef unsigned int uint_t;  // before c++11
using uint_t = unsigned int;  // c++11typedef std::vector<std::vector<int>> vvi; // before c++11
using vvi = std::vector<std::vector<int>>; // c++11

使用 using 明显简洁并且易读。

定义函数指针之类的操作:

typedef void (*func)(int, int); // 啥玩意,看不懂
using func = void (*)(int, int); // 起码比 typedef 容易看的懂吧

上面的代码使用 using 起码比 typedef 容易看的懂一些吧,但是我还是看不懂,因为我从来不用这种来表示函数指针,用 std::function()std::bind()std::placeholder()、lambda 表达式它不香吗。

函数模板的默认模板参数

c++11 之前只有类模板支持默认模板参数,函数模板是不支持默认模板参数的,c++11 后都支持。以下是 c++11 后支持的写法的示例:

// 类模板
template <typename T, typename U=int>
class A {T value;  
};template <typename T=int, typename U> // error
class A {T value;  
};

类模板的默认模板参数必须从右往左定义,即模板参数必须写在参数表的最后,而函数模板则没有这个限制。甚至于,根据实际场景中函数模板被调用的情形,编译器还可以自行推导出部分模板参数的类型。

// 函数模板示例1
template <typename R = int, typename U>
R func(U val)
{return val;
}
int main()
{func(97);               // R=int, U=intfunc<char>(97);         // R=char, U=intfunc<double, int>(97);  // R=double, U=intreturn 0;
}// 函数模板示例2
template <typename R, typename U=int>
R func1(U val) {return val;
}template <typename R=int, typename U>
R func2(U val) {return val;
}int main() {cout << func1<int, double>(99.9) << endl; // 99cout << func1<double, double>(99.9) << endl; // 99.9cout << func1<double>(99.9) << endl; // 99.9cout << func1<int>(99.9) << endl; // 99cout << func2<int, double>(99.9) << endl; // 99cout << func1<double, double>(99.9) << endl; // 99.9cout << func2<double>(99.9) << endl; // 99.9cout << func2<int>(99.9) << endl; // 99return 0;
}

总的来说,c++11 支持为函数模板中的参数设置默认值,在实际使用过程中,我们可以选择使用默认值,也可以尝试由编译器自行推导得到,还可以亲自指定各个模板参数的类型。

http://www.15wanjia.com/news/38008.html

相关文章:

  • 廊坊网站建设方案策划google关键词规划师
  • 自媒体网站 程序山西网络营销seo
  • 深圳网站建设网络公司网站设计与网页制作
  • wordpress维护页面网站seo优化案例
  • 重庆合川企业网站建设网络营销策划方案书
  • 任丘市做网站软文代写是什么
  • 嘉兴建站软件0元免费做代理
  • 漳州网站建设企业简述seo对各类网站的作用
  • 免费的黄冈网站有哪些平台游戏软件郑州百度推广公司地址
  • 昆山网站建设公司怎么样职业培训学校
  • 单页的网站怎么做的成人编程培训机构排名前十
  • 做网站选哪个语言百度推广入口
  • 500元做网站网络服务器
  • 淄博做网站的优化百度百科
  • 做网站公司 信科网络seo排名优化推广报价
  • 广告网页设计seo和sem推广
  • wordpress 后台用户权限台州关键词首页优化
  • 怎么做套版网站深圳小程序建设公司
  • 怎样做企业手机网站建设黄山网站建设
  • wordpress资源搜索插件企业网站建设优化
  • seo品牌优化整站优化网络销售推广平台
  • 免费做图素材网站有哪些百度网盘下载慢
  • 千锋教育软件测试seo赚钱方式
  • 佛山h5建站模板关键词在线采集
  • 广州市海珠区建设局五位一体网站win10系统优化工具
  • 网站后台更新怎么做福州seo按天付费
  • 企业做网站的好处有哪些中国新闻最新消息
  • 想学网站制作口碑营销
  • 跨境电商东莞网站建设资源优化网站排名
  • 街道人大网站建设软文范例大全1000字