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

北京给公司做网站多少钱c 网站开发 readonly属性

北京给公司做网站多少钱,c 网站开发 readonly属性,西双版纳网站建设开发公司,企业网站分析案例一、 统一的列表初始化 1.1 #xff5b;#xff5d;初始化 在C98中#xff0c;标准允许 使用花括号{}对数组或者结构体元素 进行统一的列表初始值设定 C11扩大了用大括号 括起的列表(初始化列表)的使用范围 使其可用于所有的内置类型和 用户自定义的类型 使用初始化列表时… 一、 统一的列表初始化 1.1 初始化 在C98中标准允许 使用花括号{}对数组或者结构体元素 进行统一的列表初始值设定 C11扩大了用大括号 括起的列表(初始化列表)的使用范围 使其可用于所有的内置类型和 用户自定义的类型 使用初始化列表时 可添加等号()也可不添加 class Date { public:Date(int year, int month, int day):_year(year), _month(month), _day(day){cout Date(int year, int month, int day) endl;} private:int _year;int _month;int _day; };void test1() {Date d1(2024, 1, 29); // old style// C11支持的列表初始化这里会调用构造函数初始化Date d2{ 2024, 1, 30 };Date d3 { 2024, 1, 31 };vectorDate vd1 { d1, d2 };vectorDate vd2 { Date{ 2024, 1, 29 }, Date{ 2024, 1, 30 } };vectorDate vd3 { { 2024, 1, 29 }, { 2024, 1, 31 } };mapstring, string dict { {sort, 排序}, {string, 字符串}, {Date, 日期} };pairstring, string kv1 { Date, 日期 };pairstring, string kv2{ Date, 日期 }; }1.2 std::initializer_list std::initializer_list的介绍文档 http://www.cplusplus.com/reference/initializer_list/initializer_list/ std::initializer_list是什么类型 int main() {// the type of il is an initializer_list auto il { 10, 20, 30 };cout typeid(il).name() endl;initializer_listint::iterator it il.begin();cout it;// *it 1; // 不能修改因为指向常量区return 0; }std::initializer_list使用场景 std::initializer_list一般是作为构造函数的参数 C11对STL中的不少容器就增加 std::initializer_list作为参数的构造函数 这样初始化容器对象就更方便了 也可以作为operator的参数 这样就可以用大括号赋值 以前我们模拟实现的vector 不支持{}初始化和赋值 现在可以通过加一个构造函数实现 {}初始化和赋值 vector(initializer_listT il) {// 第一种方法用迭代器支持/*typename initializer_listT::iterator it il.begin();while (it ! il.end()){push_back(*it);it;}*/// 第二种方法范围for支持for (auto e : il){push_back(e);} }二、声明 2.1 decltype 关键字decltype将变量的类型 声明为表达式指定的类型 // decltype的一些使用使用场景 templateclass T1, class T2 void F(T1 t1, T2 t2) { decltype(t1 * t2) ret; cout typeid(ret).name() endl; } int main() { const int x 1; double y 2.2; decltype(x * y) ret; // x*y是double类型ret的类型是double decltype(x) p; // p的类型是const int* cout typeid(ret).name() endl; cout typeid(p).name() endl; F(1, a); return 0; }// 以上都能通过auto解决而下面则无法通过auto解决 // vector存储的类型跟x*y表达式返回值类型一致 vectordecltype(x * y) v;decltype可以推导一个表达式的类型 用这个类型实例化模板参数或定义对象 2.2 nullptr 由于C中NULL被定义成字面量0 这样就可能回带来一些问题 因为0既能指针常量 又能表示整形常量 所以出于清晰和安全的角度考虑 C11中新增了nullptr用于表示空指针 三、STL中一些变化 3.1 新容器 用橘色圈起来是 C11中的一些几个新容器 最有用的是unordered_map和 unordered_set array和forward_list就比较鸡肋 基本每个容器都增加了一些C11的方法 增加支持initializer_list的构造函数 使用更方便, 有一定价值增加cbegin和cend系列迭代器接口 比较鸡肋移动构造和移动赋值 vector (vector x);支持右值引用相关插入接口函数 3和4价值非常大 提高了拷贝效率 四、右值引用和移动语义 4.1 左值引用 我们之前学的引用叫左值引用 而C11中新增了的右值引用语法特性 无论左值引用还是右值引用 都是给对象取别名 左值是一个表示数据的表达式 (如变量名或解引用的指针) 通过获取它的地址可以对它赋值 左值可以出现在赋值符号的左边也可以是右边 定义时const修饰符后的左值 不能给他赋值但是可以取它的地址 左值引用就是给左值的引用给左值取别名 // 以下的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;4.2 右值引用 右值也是一个表示数据的表达式 如字面常量、表达式返回值 函数返回值(这个不能左值引用返回)等等 右值只能出现在赋值符号的右边 右值不能取地址 右值引用就是对右值的引用给右值取别名 double x 1.1, y 2.2; // 以下几个都是常见的右值 10; x y; fmin(x, y); // 以下几个都是对右值的右值引用 int rr1 10; double rr2 x y; double rr3 fmin(x, y); // 这里编译会报错error C2106: “”: 左操作数必须为左值 10 1; x y 1; fmin(x, y) 1;需要注意的是 右值不能取地址的 但是给右值取别名后 会导致右值被存储到特定位置 且可以取到该位置的地址 也就是说例如不能取字面量10的地址 但是rr1引用后可以对rr1取地址也可以修改rr1 如果不想rr1被修改可以用const int rr1 去引用 double x 1.1, y 2.2;int rr1 10;const double rr2 x y;rr1 20;rr2 5.5; // 报错4.3 左值引用与右值引用比较 左值 左值引用只能引用左值不能引用右值 (权限会被放大)但是const左值引用既可引用左值 也可引用右值 // 左值引用只能引用左值不能引用右值。int a 10;int ra1 a; // ra为a的别名//int ra2 10; // 编译失败因为10是右值// const左值引用既可引用左值也可引用右值。const int ra3 10;const int ra4 a;右值 右值引用只能右值不能引用左值但是右值引用可以move以后的左值 // 右值引用只能右值不能引用左值。int r1 10;// error C2440: “初始化”: 无法从“int”转换为“int ”// message : 无法将左值绑定到右值引用int a 10;int r2 a;// 右值引用可以引用move以后的左值int r3 std::move(a);std::move的功能 将一个左值强制转化为右值(将亡值) (但并不能移动任何东西) 然后通过右值引用使用该值以用于移动语义 从实现上讲 std::move基本等同于一个类型转换 static_castT(lvalue); C 标准库使用比如vector::push_back等这类函数时 会对参数的对象进行复制连数据也会复制 这会造成对象内存的额外创建 本来只是想把参数push_back进去就行了 通过std::move可以避免不必要的拷贝操作 std::move是为性能而生 std::move是将对象的状态或者所有权 从一个对象转移到另一个对象 只是转移没有内存的搬迁或者内存拷贝 4.4 右值引用使用场景和意义 右值分为纯右值和将亡值 // 模拟实现string string s1(hello world); // 如果s1是左值,调用正常拷贝构造走深拷贝 string ret1 s1;// 如果是右值(将亡值)还走深拷贝就很不划算 // 将亡值是即将被delete的值 string ret2 (s1!);这时可以重新写一个拷贝构造 用右值引用来接收传参 以此区分左值和右值 如果是右值把我置空跟你交换一下 并且在函数传参上右值引用也能发挥作用 string to_string(int value) {string ret;return ret; }int main() {string s to_string(123);return 0; }返回值把值赋给临时对象有一次拷贝构造 临时对象把值赋给s又会有一次拷贝构造 编译器优化之后把值直接赋给s 减少一次拷贝构造 有了右值引用 这样ret返回值不用调析构 s也不用调拷贝 总结 左值引用减少拷贝 提高效率 右值引用也是减少拷贝 提高效率 但是他们的角度不同 左值引用是直接减少拷贝 右值引用是间接减少拷贝 识别出是左值还是右值 如果是右值 则不再深拷贝 直接移动拷贝 提高效率 五、模板中的 万能引用 模板中的不代表右值引用 而是万能引用其既能接收左值又能接收右值 模板的万能引用只是提供了 能够接收同时接收左值引用和右值引用的能力 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 右值但是引用类型的唯一作用就是限制接收的类型 后续使用中都退化成了左值 如果希望在传递过程中保持它的 左值或者右值的属性 就需要用到完美转发 5.1 完美转发 std::forward 完美转发 在传参的过程中保留对象原生类型属性 templatetypename T void PerfectForward(T t) {Fun(std::forwardT(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 右值本篇博客完感谢阅读 如有错误之处可评论指出 博主会耐心听取每条意见
http://www.hkea.cn/news/14483719/

相关文章:

  • 阿里云万网网站制作网站更换域名备案吗
  • 网站挂百度广告备案名称和网站logo不一致
  • c++语言网站建设安徽省建设厅执业资格注册中心网站
  • 网站建设专业培训包含导航栏至少包含三个布局
  • 做视频网站软件有哪些重庆网站建设公司
  • 外国企业网站模板免费下载怎样在手机上建网站
  • 贵州省建设网官方网站购物网站开发公司
  • wordpress站点是什么网络舆情中心
  • 网站备案号云龙徐州网站开发
  • 威海市建设局官方网站科技是第一生产力
  • qq网页版登录入口网站中山市住房和城乡建设局官网
  • 网站开发的技术参数wordpress修改了文件后前端不生效
  • Html5移动网站该网站正在建设中 马上就来
  • 聊城做网站的公司资讯百度下载app
  • 个人网站电商怎么做初学者自己做网站
  • 网站开发公司代理企业营销培训
  • 有趣的网站名制作网页用什么语言
  • 网站建设报什么专业网站建站上海
  • 联科三网合一网站建设系统外包小程序开发技巧
  • 上海软件开发的公司排名seo上海优化
  • 深圳建设网站首页网站开发中的渲染是什么意思
  • 网站建设选超速云建站做网站应该了解什么
  • 永久免费建站空间做论坛app网站有哪些
  • 如何进行网站的seo做微信的网站叫什么名字
  • 加强门户网站建设 信息公开北京建网站定制价格
  • wordpress入门建站教程二陕西城乡住房建设厅网站
  • 石家庄好用的招聘网站建立wordpress显示数据库错误
  • 张家港质监站网址动漫网站开发优势
  • 网站开发哪些百度站长官网
  • 优秀服装网站设计网站建设管理需要招聘什么人才