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

北京知名网站建设公司公众号开发者密码忘了怎么办

北京知名网站建设公司,公众号开发者密码忘了怎么办,网上销售哪些平台免费,地方网站域名关键字 nullptr and std::nullptr_t auto 一致性初始化:Uniform Initialization 11之前,初始化方法包括:小括号、大括号、赋值号,这让人困惑。基于这个原因,给他来个统一,即,任何初始化都能够…

关键字

nullptr and std::nullptr_t

auto

一致性初始化:Uniform Initialization

11之前,初始化方法包括:小括号、大括号、赋值号,这让人困惑。基于这个原因,给他来个统一,即,任何初始化都能够使用大括号来实现。实现的方法使用另外一个新特性:初始化列表。下一个特性介绍。

// 11之前
Rect r1 = {3, 7, 30};
Rect r2(3, 7, 20);
int ia[6] = {27, 89, 20};// 11之后
int values[] {1, 2, 3};
vector<int> v {1, 2, 3};
complex<double> c {4.0, 3.0};

初始化列表:Initializer Lists

ERROR:narrowing    不允许窄化的转换 

前面的一致性初始化中的大括号会形成一个初始化列表。具体实现代码如下:

explicit

struct complex{int real, imag;// explicitcomplex(int re, int im = 0) : real(re), imag(im){}complex operator+(const complex& x){return complex((real + x.real), (imag + x.imag));}
}

11之前,用于一个参数的构造函数。有上面的代码,那么在执行complex c1(12, 5); complex c2 = c1 + 5;的时候,构造函数不用explicit修饰,则会把5变成一个复数类,但是如果用explicit修饰了,这两句代码就会报错。也就是,让编译器知道,用户希望只在显式调用构造函数的时候才会调用,其他时候不允许调用。

11之后,explicit可用在接受一个以上参数的构造函数。突破了一个参数的限制,阻止任意多个参数的构造函数的隐式调用。

class p {public:p(int a, int b){cout << "p(int a, int b)" << endl;}explicit p(int a, int b, int c){cout << "expilict p(int a, int b, int c)" << endl;}
}p p1(1, 2); //p(int a, int b)
p p2 = {1, 2, 3}; // 报错,因为initializer想要去调用用explicit修饰的构造函数,被编译器阻止

=default, =delete


如果自行定义了一个构造函数,那么编译器就不会给你一个默认的构造函数;

如果你强行加一个 =default,就可以重新获得并使用编译器给出的默认构造函数。

=default只可以用于构造函数,=delete可用于任何函数,给编译器说明禁止使用这个函数。

模板别名:Alias Template

别以为它只是让一个类换个名字,方便书写,它后面会引发一个大事情。

比如下面这个例子:

template <typename T>
using Vec = std::vector<T, MyAlloc<T>>;Vec<int> coll; 
is equivalent to
std::vector<int,MyAlloc<int>> coll;

那我们可以用#define或是typedef来达到同样的效果吗?

#define Vec<T> template<typename T> std::vector<T, MyAlloc<T>>;
Vec<int> coll; //------> template<typename int> std::vector<int, MyAlloc<int>>; //这不是我们想要的//如果使用typedef,因为typedef是不能够接受参数的,最多写成下面这样
typedef std::vector<int, MyAlloc<int>> Vec;

所以,using的优势就是能够指定参数。

那这样做,只是为了减少代码量吗?如果有一个场景,需要以一个类型作为参数,而不是以一个类的对象作为参数呢?比如说下面这种情况:

Container是一种类型,所以上面的语句就会报错,找不到Container定义。有一种解决方案是牺牲方法的通用性,将Container和T进行组合变成一个参数传入,这种实现方法也不赖。那有没有更优雅的实现方案呢?程序员嘛,都是讲究优雅的!

所以要进行下面的思考:有没有模板语法,能够在一个模板类中接受一个模板参数,在模板类中取出这个模板参数呢?有!模板模板参数!

模板模板参数

template<typename T, template<class> class Container>
class XCIs{
private:Container<T> c;
public:XCIs(){for(long i = 0; i < size; ++i)c.insert(c.end(), T());...(上图中的实现)}
}

上述就是模板模板参数的使用。在引入模板模板参数之后,就可以这么使用:XCIs<Mystring, vector> c1;完成我们的任务。但是!这一句又会报错,因为vector模板容器需要两个模板参数(类型和分配器)!这,不就需要using了吗? 

类型别名:Type Alias

类似于typedef,不过是借助using来实现:

typedef void(*func)(int, int); // 函数指针||v
using func = void(*)(int, int);

和typedef的唯一区别是using多了一个模板别名(带参数)的功能。

using的所有用法

  1. using namespace std; //打开一个命名空间
    using std::count; //打开一个命名空间的一个组件
  2. using Base::_M_Prime; //打开一个类的一个成员
  3. 模板别名、类型别名

noexcept

保证一个函数不会抛出异常:

void foo() noexcept;
void foo() noexcept(predicate); // 在条件predicate为真时,不抛出异常

异常一定要被处理,如果一个函数声明为noexcept就会把异常交给上一层调用。

你最好是告诉C++(特别是vector):你的移动构造函数和移动赋值构造函数是noexcept的。因为vector要增长空间,增长空间有构造函数调用过程,如果不显示声明移动构造时noexcept的,编译器不敢调用!

final

修饰类,表示被修饰的类不能够继承;
修饰虚函数,表示虚函数不能被重写。

decltype

主要是为泛型编程而设计,以解决泛型编程中,由于有些类型由模板参数决定,而难以(甚至不可能)表示之的问题。有点类似typeof。

参考文章:侯捷C++八部曲笔记(四、C++2.0新特性)_2.0/3+1c++-CSDN博客

http://www.yayakq.cn/news/315801/

相关文章:

  • 绵阳企业网站建设公司app 网站开发公司
  • app开发网站建设培训班微机做网站的软件
  • 免费网站建站软件昆山网站建设网站
  • NET网站开发程序员招聘网页美工设计教程
  • 网站 后台 安装网页制作基础教程课件
  • 济南网站优化排名推广网站展示英文都用什么字体
  • 站长统计app官方网站网站权重是怎样进行传递的
  • 上海未来网站建设公司黄页模式
  • 成功的营销网站软件开发服务公司
  • 深圳朝阳电子网站建设网站建设怎么找客源
  • 如何做pc网站适配英文网站开发哪家好
  • 微信做淘宝客 网站打不开了重庆行业平台
  • 关于教做鞋的网站wordpress主题4mudi
  • 有哪些做兼职的设计网站有哪些工作诸城网页设计公司
  • 手机能进封禁网站的浏览器程序开发 网站开发
  • 做论坛推广的网站代理服务器ip国外
  • 客户说做网站没效果怎么回答好广州建站网站前十名
  • 工信部 网站开发设计师wordpress 即时
  • 德州做网站的公司有哪些网站管理助手打开是系统参数配置
  • 做网站需要编程?国内网站建设排名
  • 怎么做示爱的网站免费seo诊断
  • 网站营销策略有哪些友情链接发布网
  • 网站分析设计做的项目的过程公司网站做优化少钱
  • 中国建设银行抚州分行网站建网站建设网站
  • 绵阳微网站制作wordpress微博图床怎么用
  • 甘肃建投土木工程建设有限公司网站后台欧阳娜娜自创品牌
  • 看谁做的好舞蹈视频网站巨腾外贸网站建设
  • 做视频网站教程网页设计图片边框代码
  • 网站自动生成做网站平台的公司
  • 网站无后台可以上框架宣传的网站开发需要多少钱