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

用一个域名免费做网站动漫设计师

用一个域名免费做网站,动漫设计师,设置网站解析,网站建设seo运营规划c11 1.C11简介2.列表初始化2.1 #xff5b;#xff5d;初始化2.2 std::initializer_list 3.变量类型推导3.1 auto3.2 decltype3.3 nullptr 4.范围for循环5.final与override6.智能指针7.新增加容器---静态数组array、forward_list以及unordered系列8.默认成员函数控制9.右值引… c11 1.C11简介2.列表初始化2.1 初始化2.2 std::initializer_list 3.变量类型推导3.1 auto3.2 decltype3.3 nullptr 4.范围for循环5.final与override6.智能指针7.新增加容器---静态数组array、forward_list以及unordered系列8.默认成员函数控制9.右值引用9.1 左值引用和右值引用 1.C11简介 C11 是第二个真正意义上的 C 标准也是 C 的一次重大升级。C11 增加了很多现代编程语言的特性比如自动类型推导、智能指针、lambda 表达式等这使得 C 看起来又酷又潮一点也不输 Java和 C#。 2.列表初始化 2.1 初始化 class Date { public:Date(int y,int m,int d):_y(y),_m(m),_d(d){}~Date(){}private:int _y;int _m;int _d; }; int main() {int a{ 100 };vectorint v{ 1,1,1 };int m[3]{ 5,5,5 };Date d{ 2021,2,5 };return 0; }2.2 std::initializer_list 可以看出这是一个已经实现好的类 它的作用呢就是可以实现对所有的类型实现赋值 对于自定义类型可以直接重载一个来使用 templateclass T class myvector {typedef T* myiterator; public:myvector(initializer_listT i){start new T[i.size()];finsh start i.size();end finsh;myiterator it start;typename initializer_listT::iterator t i.begin();while (t ! i.end()){*it *t;it;t;}}~myvector(){}private:myiterator start;myiterator finsh;myiterator end; };3.变量类型推导 3.1 auto 自动推导类型 int main() {myvectorint mv{ 1,2,3,5,5,6 };auto v{ 1,2,3,4,5,6 };cout typeid(v).name() endl;//vectorint v{ 1,2,3,5,5,6 };//cout mv endl;/*cout NULL endl;nullptr;*/return 0; }3.2 decltype 关键字decltype将变量的类型声明为表达式指定的类型和auto差不多 3.3 nullptr 4.范围for循环 底层就是通过迭代器实现所以只要实现了迭代器的数据结构都可以使用范围for 5.final与override 在继承和多态讲过final表示禁止继承override表示判断子类继承的虚函数有没有重写 6.智能指针 因为指针在c/c只太重要了所以我们在普通的指针基础上实现智能指针其中包括unique_ptr等等等在等后期具体写毕竟指针才是c/c的精髓~~~ 7.新增加容器—静态数组array、forward_list以及unordered系列 8.默认成员函数控制 因为有了右值引用c出现了一个移动构造一个移动赋值重载 注意 如果你没有自己实现移动构造函数且没有实现析构函数 、拷贝构造、拷贝赋值重载中的任 意一个。那么编译器会自动生成一个默认移动构造。默认生成的移动构造函数对于内置类 型成员会执行逐成员按字节拷贝自定义类型成员则需要看这个成员是否实现移动构造 如果实现了就调用移动构造没有实现就调用拷贝构造。 如果你没有自己实现移动赋值重载函数且没有实现析构函数 、拷贝构造、拷贝赋值重载中 的任意一个那么编译器会自动生成一个默认移动赋值。默认生成的移动赋值重载函数对于内 置类型成员会执行逐成员按字节拷贝自定义类型成员则需要看这个成员是否实现移动赋 值如果实现了就调用移动赋值没有实现就调用拷贝赋值。(默认移动赋值跟上面移动构造 完全类似) 就是一句话你没有实现移动的构造或者赋值重载的情况下也没有写析构拷贝构造拷贝赋值重载的情况下编译器才会给你实现一个默认的移动。。。 如果你提供了移动构造或者移动赋值编译器不会自动提供拷贝构造和拷贝赋值。 强制生成默认函数的关键字default: C11可以让你更好的控制要使用的默认函数。假设你要使用某个默认的函数但是因为一些原 因这个函数没有默认生成。比如我们提供了拷贝构造就不会生成移动构造了那么我们可以 使用default关键字显示指定移动构造生成 class Person { public:Person(const char* name , int age 0):_name(name), _age(age){}Person(const Person p):_name(p._name), _age(p._age){}Person(Person p) default;//有这句s3会调用这个没有的话就调用上面的一个 private:string _name;int _age; }; int main() {Person s1;Person s2 s1;Person s3 std::move(s1);return 0; }禁止生成默认函数的关键字delete: 如果能想要限制某些默认函数的生成在C98中是该函数设置成private并且只声明补丁 已这样只要其他人想要调用就会报错。在C11中更简单只需在该函数声明加上delete即 可该语法指示编译器不生成对应函数的默认版本称delete修饰的函数为删除函数。 9.右值引用 9.1 左值引用和右值引用 传统的C语法中就有引用的语法而C11中新增了的右值引用语法特性所以从现在开始我们 之前学习的引用就叫做左值引用。无论左值引用还是右值引用都是给对象取别名。 什么是左值什么是左值引用 左值是一个表示数据的表达式(如变量名或解引用的指针)我们可以获取它的地址可以对它赋 值左值可以出现赋值符号的左边右值不能出现在赋值符号左边。定义时const修饰符后的左 值不能给他赋值但是可以取它的地址。左值引用就是给左值的引用给左值取别名。 int main() {// 以下的p、b、c、*p都是左值int* p new int(0);int b 1;const int c 2;// 以下几个是对上面左值的左值引用int* rp p;int rb b;const int rc c;int pvalue *p;return 0; }class A { public:A(const int b):a(b){cout 构造 endl;}A(const int b):a(b){cout 构造 endl;}void operator(int a){cout void operator(int a) endl;}void operator(int a){cout void operator(int a) endl;}void operator(const int a){cout void operator(const int a) endl;}void operator(const int a){cout void operator(const int a) endl;} private:int a; };void fun(A a) {a 100; } int main() {const int m 10;A b(m);//左值A a(100);//右值A c(move(m));//右值a m;//左值b 100;//右值c move(m);//右值fun(100);fun(m);return 0; }一般情况我们右值不是这么玩的而是在模板里面实现一种叫做完美转发的事情 void Fun(int x) { cout 左值引用 endl; } void Fun(const int x) { cout const 左值引用 endl; } void Fun(int x) { cout 右值引用 endl; } void Fun(const int x) { cout const 右值引用 endl; } // 模板中的不代表右值引用而是万能引用其既能接收左值又能接收右值。 // 模板的万能引用只是提供了能够接收同时接收左值引用和右值引用的能力 // 但是引用类型的唯一作用就是限制了接收的类型后续使用中都退化成了左值 // 我们希望能够在传递过程中保持它的左值或者右值的属性, 就需要用我们下面学习的完美转发 templatetypename T void PerfectForward(T t) {Fun(t); } int main() {PerfectForward(10); // 右值int a;PerfectForward(a); // 左值PerfectForward(std::move(a)); // 右值const int b 8;PerfectForward(b); // const 左值PerfectForward(std::move(b)); // const 右值return 0; }为什么全部变成了左值呢看来模板中的只是一种可以接收左值和右值的操作 那么我们怎么样可以实现完美转发呢 只需要一个forward函数就可 这个函数不是一次转发就可以只要是你使用了万能引用的模板都必须使用forward来转发保证变量的特性不会衰减到左值
http://www.w-s-a.com/news/196196/

相关文章:

  • 河南建设工程协会网站网站收银系统建设
  • 网站制作 服务企业网站案例展示
  • 咸宁网站建设wordpress手动降级
  • 昆明做网站建设怎么样做网站赚钱全攻略
  • 企业网站建设实战教程微信如何注册小程序
  • 做一件代发网站百度seo服务
  • 小说网站开发 公司可以做行程的网站
  • 古交市网站建设公司apk连接wordpress
  • 网页 网 址网站区别wordpress菜单居右
  • 网站建设搭建运营一台云服务器做多个网站
  • 用php做网站用什么框架推广网站推荐
  • 如何用二级域名做网站多用户网上商城
  • 河南省建设科技网站浅谈电子商务网站建设与规划
  • 网站空间需要续费青海网站建设推广
  • 网站开发本地环境企业网站建设排名口碑
  • 做新闻的网站怎样赚钱个人网站课程设计报告
  • 网站设计样例那个网站做图片好看
  • 小型公司网站建设深圳网络营销策划有限公司
  • 国内优秀企业网站做视频网站用什么系统
  • 网站建设入门pdfwordpress网站标题
  • 专业网站的定义网站运营的概念
  • 外贸服装网站建设网页美工设计说明书
  • 郑州专业做网站公百度翻译api wordpress
  • 做网站哪里找大学的一级或二级域名
  • 没有静态ip可以做网站服务器上饶网站制作需要多少钱
  • 网站建设wangzhii做国外网站做什么内容
  • 网站建设 搞笑笑话经典 wordpress主题下载
  • 做网站要懂哪些wordpress 站点网络
  • 郑州外贸网站建设公司排名网站设计做啥好
  • 网站开发合同付款比例wordpress调用指定文章内容