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

博客网站建设方案书猪八戒 网站开发支付

博客网站建设方案书,猪八戒 网站开发支付,大学专业分类目录,做个app需要多少费用用成员函数重载实现is_default_constructible 首先介绍一个C标准库提供的可变参类模板std::is_default_constructible。这个类模板的主要功能是判断一个类的对象是否能被默认构造#xff08;所谓默认构造#xff0c;就是构造一个类对象时#xff0c;不需要给该类的构造函数…用成员函数重载实现is_default_constructible 首先介绍一个C标准库提供的可变参类模板std::is_default_constructible。这个类模板的主要功能是判断一个类的对象是否能被默认构造所谓默认构造就是构造一个类对象时不需要给该类的构造函数传递任何参数。例如有一个类A和一个类B代码如下。 #include killCmake.h#includestring using namespace std;class A { };class B { public:B(int tmpval) {} };int main() {A a_obj;// E0291: 类 B 不存在默认构造函数B b_obj;// 要构造类B对象必须给类B的构造函数提供一个参数B b_obj(1);return 0; } 现在可以使用std::is_default_constructible判断类A和类B对象是否能被默认构造该类没有构造函数或有一个不带参数的构造函数。在main()主函数中添加代码 #include killCmake.h#includestringusing namespace std;class A { };class B { public:B(int tmpval) {} };int main() {std::cout std::is_default_constructibleint::value std::endl;std::cout std::is_default_constructibledouble::value std::endl;std::cout std::is_default_constructibleA::value std::endl;std::cout std::is_default_constructibleB::value std::endl;return 0; } 从结果中可以看到int、double等基本类型内部类型对象以及类A对象都是可以默认构造的结果为1而类B对象因为其构造函数带一个形参该形参没有默认值所以无法默认构造。 在明白了std::is_default_constructible的功能后现在就来深入了解一下它的实现源码。 如果让你来实现一个与std::is_default_constructible同样的功能借此看一看如何使用SFINAE特性萃取一些重要信息这里要萃取的信息是判断某个类是否“没有构造函数或有一个不带参数的构造函数”满足这个条件的类就能够默认构造。IsDefConstructible类模板的代码如下。 templatetypename T class IsDefConstructible { private:templatetypename decltype(T())static std::true_type test(void*);templatetypename intstatic std::false_type test(...);public:static constexpr bool value IsSameTypedecltype(test(nullptr)), std::true_type::value; }; 1有两个同名的静态成员函数模板test()。注意观察第1个test()的返回类型是std::true_type而第2个test()的返回类型是std::false_type。第1个test()的形参是void*而第2个test()的形参是3个点…这个形参读者应该不陌生是C语言中的省略号形参代表它可以接受0到任意多个实参。 尤其要注意第1个和第2个test()的模板参数都有默认值第1个test()的模板默认值比较关键decltype(T())要重点留意。两个test()都只有声明而没有实现体因为做类型推断一类事物一般涉及decltype的时候往往不需要具体的实现。2对于这两个test()静态成员函数重载函数调用的时候编译器会优先选择有具体形参的test()版本只有该test()版本不匹配时才会选择带省略号形参的test()版本带省略号的形参具有最低的匹配优先级。换句话说优先匹配第1个test()版本只有第1个test()版本不匹配时才会去匹配第2个test()版本。3最关键的是静态成员变量value的取值value的最终取值是一个布尔值true1或false0。如果value最终取值为1就表示通过模板参数传递给IsDefConstructible的类对象能默认构造如果value最终取值为0就表示通过模板参数传递给IsDefConstructible的类对象不能默认构造。看一看value的最终取值是经过怎样的计算得到的也就是重点分析下面这行代码 IsSameType decltype(test(nullptr)), std::true_type::value;上面这行代码用前面讲过的IsSameType…::value判断decltype(test(nullptr))和std::true_type这两个类型是否相等如果相等就返回true否则返回false。重点就是代码段decltype(test(nullptr))这段代码利用decltype判断test()函数的返回类型如果传递给IsDefConstructible的类型T支持默认构造那么显然编译器会选择第1个test()并通过decltype推导出返回类型为std::true_type从而使IsSameType…::value返回true如果传递给IsDefConstructible的类型T不支持默认构造那么第1个test()就不会成立因其类型模板参数的默认值不支持类型T的默认构造导致decltype(T())的写法根本就不成立根据SFINAE特性编译器会选择第2个test()然后通过decltype推导出返回类型为std::false_type从而使IsSameType…::value返回false。以上就是IsDefConstructible类模板的实现细节。现在可以对main()主函数的代码行进行修改测试IsDefConstructible类模板能否正常工作。
http://www.w-s-a.com/news/276045/

相关文章:

  • 做网站 买空间商务网站内容建设包括
  • 萝岗网站建设为什么点不开网站
  • 惠州网站制作询问薇北京网站建设最便宜的公司
  • 注册网站英语怎么说wordpress 3.8.3
  • 甘肃张掖网站建设网站开发软件是什么专业
  • 海口省建设厅网站网站数据库怎么做同步
  • 做网站建设月收入多少app开发公司广州英诺
  • 新闻播报最新网站优化外包费用
  • wordpress分页出现404最专业的seo公司
  • 连云港网站建设电话连云港市建设局网站
  • 平面设计网站有哪些比较好drupal网站建设 北京
  • 健康资讯网站模板网页价格表
  • 2008发布asp网站宝安建网站的公司
  • 郑州市城市建设管理局网站制作公司网站 优帮云
  • 网站开发 瀑布结构普陀网站建设
  • 12380网站建设情况汇报plone vs wordpress
  • c 网站开发数据库连接与wordpress类似的都有哪些
  • 状元村建设官方网站长春做网站seo的
  • 做金融资讯网站需要哪些牌照海珠营销型网站制作
  • 学做网站需要买什么书手机网络
  • 寻找做电影网站团队合作西宁网站建设君博首选
  • 兴仁县城乡建设局网站爱站关键词查询
  • 漳州网站建设公司推荐wordpress更改主机
  • c2c商城网站建设方案英文网站注册
  • 电子商务网站的运营一般需要做哪些准备宣传片拍摄思路
  • 网站建设网页制作百度怎么做自己网站
  • 建设设计网站公司巴州建设局网站
  • 淘宝建设网站的好处韶关市网站建设招标
  • 佛山高端网站免费招聘网站建设
  • 申请网站就是做网站吗wordpress tag 优化