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

最早做美食团购的网站龙采哈尔滨建站公司

最早做美食团购的网站,龙采哈尔滨建站公司,重庆做蔬菜配送的网站有哪些,mui做网站目录 命名空间 命名空间定义 1. 正常的命名空间定义 2. 命名空间可以嵌套 3.头文件中的合并 命名空间使用 命名空间的使用有三种方式#xff1a; 1:加命名空间名称及作用域限定符#xff08;::#xff09; 2:用using将命名空间中某个成员引入 3:使用using namespa…目录 命名空间 命名空间定义 1. 正常的命名空间定义 2. 命名空间可以嵌套 3.头文件中的合并  命名空间使用 命名空间的使用有三种方式 1:加命名空间名称及作用域限定符:: 2:用using将命名空间中某个成员引入 3:使用using namespace 命名空间名称 引入 C输入输出 说明 std命名空间的使用惯例 缺省参数 缺省参数分类 1全缺省参数 2半缺省参数 注意半缺省参数必须从右到左依次来给出不能间隔给缺省参数不能在函数声明和定义中同时出现 ​编辑 3. 缺省值必须是常量或者全局变量 函数重载 1、参数类型不同 2、参数个数不同 3、参数类型顺序不同 main 引用 引用概念 重类型 引用变量名(对象名) 引用实体 注意 引用特性 1. 引用在定义时必须初始化 2. 一个变量可以有多个引用 3. 引用一旦引用一个实体再不能引用其他实体 常引用 使用场景比C简单 1. 做参数交换值 2. 引用做返回值不用创建临时变量 注意引用是不可以改变指向的 地址的交换值指针也可以开别名 链表的双指针也可以更简单 总结 引用的读写功能和优点 引用和指针的区别 内联函数短小函数定义 换用内联函数 宏的优缺点 优点 缺点 auto在for循环中 空指针 命名空间 在C/C中变量、函数和后面要学到的类都是大量存在的这些变量、函数和类的名称将都存 在于全局作用域中可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化 以避免命名冲突或名字污染namespace关键字的出现就是针对这种问题的。 比如在C语言中 C语言没办法解决类似这样的命名冲突问题所以C提出了namespace来解决 #include stdio.h #include stdlib.hint rand 10;// C语言没办法解决类似这样的命名冲突问题所以C提出了namespace来解决int main() {printf(%d\n, rand);return 0; }// 编译后后报错error C2365: “rand”: 重定义以前的定义是“函数”命名空间定义 定义命名空间需要使用到namespace关键字后面跟命名空间的名字然后接一对{ }即可{ } 中即为命名空间的成员。 1. 正常的命名空间定义 namespace N{// 命名空间中可以定义变量/函数/类型int rand 10;int Add(int left, int right){return left right;}struct Node{struct Node* next;int val;}; }2. 命名空间可以嵌套 namespace N1 {int a;int b;int Add(int left, int right){return left right;}namespace N2{int c;int d;int Sub(int left, int right){return left - right;}} }3.头文件中的合并  同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。一个工程中的test.h和上面test.cpp中两个N1会被合并成一个.不同的头文件里定义的命名域到.cpp里包含上这两个头文件相当于合并了都能访问到. 注意一个命名空间就定义了一个新的作用域命名空间中的所有内容都局限于该命名空间中 命名空间使用 比如(里面printf会出现//编译报错error C2065: “a”: 未声明的标识符) namespace N{// 命名空间中可以定义变量/函数/类型int a 0;int b 1;int Add(int left, int right){return left right;}struct Node{struct Node* next;int val;}; }int main() {// 编译报错error C2065: “a”: 未声明的标识符printf(%d\n, a);return 0; }命名空间的使用有三种方式 展开命名空间会进去搜索展开命名空间域就等于暴露到全局 1:加命名空间名称及作用域限定符:: int main() {printf(%d\n, N::a);return 0;     } 2:用using将命名空间中某个成员引入 using N::b;int main() {printf(%d\n, N::a);printf(%d\n, b);return 0;     }3:使用using namespace 命名空间名称 引入 using namespce N;int main() {printf(%d\n, N::a);printf(%d\n, b);Add(10, 20);return 0;     } C输入输出 std是C标准库的命名空间名C将标准库的定义实现都放到这个命名空间中 #includeiostream// std是C标准库的命名空间名C将标准库的定义实现都放到这个命名空间中using namespace std;int main() {coutHello world!!!endl;return 0; } 说明 1. 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时必须包含 iostream 头文件 以及按命名空间使用方法使用std。 2. cout和cin是全局的流对象endl是特殊的C符号表示换行输出他们都包含在包含 iostream 头文件中。 3. 是流插入运算符是流提取运算符。 4. 使用C输入输出更方便不需要像printf/scanf输入输出时那样需要手动控制格式。 C的输入输出可以自动识别变量类型。 5. 实际上cout和cin分别是ostream和istream类型的对象和也涉及运算符重载等知识 这些知识我们我们后续才会学习所以我们这里只是简单学习他们的使用。后面我们还有有 一个章节更深入的学习IO流用法及原理。 注意早期标准库将所有功能在全局域中实现声明在.h后缀的头文件中使用时只需包含对应 头文件即可后来将其实现在std命名空间下为了和C头文件区分也为了正确使用命名空间 规定C头文件不带.h旧编译器(vc 6.0)中还支持格式后续编译器已不支持因 此推荐使用std的方式。 #include iostreamusing namespace std;int main() {int a;double b;char c;// 可以自动识别变量的类型cina;cinbc;coutaendl;coutb cendl;return 0;std命名空间的使用惯例 std是C标准库的命名空间如何展开std使用更合理呢 1. 在日常练习中建议直接using namespace std即可这样就很方便。 2. using namespace std展开标准库就全部暴露出来了如果我们定义跟库重名的类型/对象/函数就存在冲突问题。该问题在日常练习中很少出现但是项目开发中代码较多、规模 大就很容易出现。所以建议在项目开发中使用像std::cout这样使用时指定命名空间 using std::cout展开常用的库对象/类型等方式。 缺省参数 缺省参数就是给出的函数参数的默认值 在调用有缺省参数的函数时如果没有指定实参则采用该默认值否则使用指定的实参 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时如果没有指定实 参则采用该形参的缺省值否则使用指定的实参。 Func();     // 没有传参时使用参数的默认值 Func(10);   // 传参时使用指定的实参 void Func(int a 0) {coutaendl; }int main() {Func();     // 没有传参时使用参数的默认值Func(10);   // 传参时使用指定的实参return 0; } 缺省参数分类 1全缺省参数 void Func(int a 10, int b 20, int c 30){couta aendl;coutb bendl;coutc cendl;} 2半缺省参数 void Func(int a, int b 10, int c 20){couta aendl;coutb bendl;coutc cendl;} 注意半缺省参数必须从右到左依次来给出不能间隔给缺省参数不能在函数声明和定义中同时出现 3. 缺省值必须是常量或者全局变量 函数重载 参数不同包含类型不同顺序不同类型的顺序不同和个数不同 重载函数必须参数列表有所不同包括参数类型和参数个数 重载函数不依靠返回值来区分所以返回值可以相同 函数重载是函数的一种特殊情况C允许在同一作用域中声明几个功能类似的同名函数这 些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同常用来处理实现功能类似数据类型 不同的问题。 1、参数类型不同 int Add(int left, int right) {cout int Add(int left, int right) endl;return left right; }double Add(double left, double right) {cout double Add(double left, double right) endl;return left right; } 2、参数个数不同 void f() {cout f() endl; }void f(int a){cout f(int a) endl; } 3、参数类型顺序不同 void f(int a, char b) {cout f(int a,char b) endl; }void f(char b, int a) {cout f(char b, int a) endl; }main int main() {Add(10, 20);Add(10.1, 20.2);f();f(10);f(10, a);f(a, 10);return 0; } 引用 引用概念 引用不是新定义一个变量而是给已存在变量取了一个别名编译器不会为引用变量开辟内存空 间它和它引用的变量共用同一块内存空间。 重类型 引用变量名(对象名) 引用实体 void TestRef() {int a 10;int ra a;//定义引用类型printf(%p\n, a);printf(%p\n, ra); }注意 引用类型必须和引用实体是同种类型的 引用特性 1. 引用在定义时必须初始化 2. 一个变量可以有多个引用 3. 引用一旦引用一个实体再不能引用其他实体 void TestRef() {int a 10;// int ra;   // 该条语句编译时会出错int ra a;int rra a;printf(%p %p %p\n, a, ra, rra);   } 常引用 void TestConstRef() {const int a 10;//int ra a;   // 该语句编译时会出错a为常量const int ra a;// int b 10; // 该语句编译时会出错b为常量const int b 10;double d 12.34;//int rd d; // 该语句编译时会出错类型不同const int rd d; } 使用场景比C简单 1. 做参数交换值 void Swap(int left, int right) {int temp left;left right;right temp; }2. 引用做返回值不用创建临时变量 传值返回 返回的是他的拷贝所以要调用一次拷贝构造 传引用返回返回的是他的别名 减少了拷贝提高了效率 静态的没问题去掉static就有问题了n在静态栈不在临时的count里 int Count() {static int n 0;//静态的没问题去掉static就有问题了n;// ...return n;返回的时n的别名引用 }//add1对 int add1() {static int x 3;return x; }//add2是不对的 int add2() {int x 3;return x; }注意引用是不可以改变指向的 是赋值 并且abc的值都被改了 常引用 b的改变会影响a是所以不行 引用的过程中权限不能被放大。 const int a0;intba; const int c0;int dc;类型相同不用创建临时变量、 类型不同需要创建临时变量同时临时变量具有常性 类型转换/强制类型转换就要创建临时变量临时变量具有常性 地址的交换值指针也可以开别名 用C需要二级指针但用引用就可以不用二级 void swap(int* a,int* b) {int*ta;ab;bt; }int main() {int x0;int y1;int*pxx;int*pyy;swap(px,py); } 链表的双指针也可以更简单 总结 1、基本任何场景都可以引用传参 2、谨慎用引用做返回值。出了函数作用域对象不在了就不能用引用返回还在就可以用引用返回 引用的读写功能和优点 查找和修改 改进  引用和指针的区别 引用和指针的不同点: 1. 引用概念上定义一个变量的别名指针存储一个变量地址。 2. 引用在定义时必须初始化指针没有要求 3. 引用在初始化时引用一个实体后就不能再引用其他实体而指针可以在任何时候指向任何 一个同类型实体 4. 没有NULL引用但有NULL指针 5. 在sizeof中含义不同引用结果为引用类型的大小但指针始终是地址空间所占字节个数(32 位平台下占4个字节) 6. 引用自加即引用的实体增加1指针自加即指针向后偏移一个类型的大小 7. 有多级指针但是没有多级引用 8. 访问实体方式不同指针需要显式解引用引用编译器自己处理 9. 引用比指针使用起来相对更安全 10.引用一旦定义时初始化指定就不能再修改指针可以改变指向 11.引用表面好像是传值其本质也是传地址只是这个工作有编译器来做 12.指针需要开辟空间引用不需要开辟空间 13.指针是间接操作对象引用时对象的别名对别名的操作就是对真实对象的直接操作 内联函数短小函数定义 换用内联函数 定义和声明要一起,inline函数不支持声明和定义分离开 1. inline是一种以空间换时间的做法如果编译器将函数当成内联函数处理在编译阶段会 用函数体替换函数调用缺陷可能会使目标文件变大优势少了调用开销提高程序运 行效率。 2. inline对于编译器而言只是一个建议不同编译器关于inline实现机制可能不同一般建议将函数规模较小(即函数不是很长具体没有准确的说法取决于编译器内部实现)、不是递归、且频繁调用的函数采用inline修饰否则编译器会忽略inline特性。 宏的优缺点 优点 1.增强代码的复用性。 2.提高性能。 缺点 1.不方便调试宏。因为预编译阶段进行了替换 2.导致代码可读性差可维护性差容易误用。 3.没有类型安全的检查 。 C有哪些技术替代宏 1. 常量定义 换用const enum 2. 短小函数定义 换用内联函数 auto在for循环中 使用auto定义变量时必须对其进行初始化在编译阶段编译器需要根据初始化表达式来推导auto 的实际类型。因此auto并非是一种“类型”的声明而是一个类型声明时的“占位符”编译器在编 译期会将auto替换为变量实际的类型。 auto与指针和引用结合起来使用 用auto声明指针类型时用auto和auto*没有任何区别但用auto声明引用类型时则必须 加 适用于数组 范围for 依次取数组中数据赋值给x x只是个符号符号随便起 空指针 C中NULL相当于0要用nullptr了
http://www.w-s-a.com/news/106073/

相关文章:

  • 国开行网站毕业申请怎么做大连旅顺口旅游攻略
  • 鲜花店网站源码成都专做婚介网站的公司
  • 合肥企业网站建设工哈尔滨公告
  • 华强北 做网站互联网服务平台入口
  • vi设计案例网站微信导航网站 dedecms
  • 青浦区做网站设计图片手绘图片
  • 做网站的基本功制作网站公司推荐
  • 阿里云快速建站教程个人网站 费用
  • 广东购物网站建设微信公众号制作模板免费
  • 阿里国际站韩语网站怎么做让移动网站
  • 北京外包做网站如何报价中国几大网络推广公司
  • 中国建设部网站关于资质wordpress 建app
  • 程序员找工作的网站哈尔滨建设信息网站
  • 公司 网站 方案高考写作网站
  • 网站后台如何登陆网站开发需求逻辑图
  • 市级档案网站建设情况分析server2008做DNS与网站
  • 公积金门户网站建设方案网站建设代理平台怎么做
  • 网站建设知识论文抖音开放平台是干什么的
  • 网站建设期末试卷大气简洁网站
  • 电子商务网站建设报告范文单位做网站怎么做
  • 优质的外国网站qq小程序在哪里打开
  • 商务网站建设与推广实训报告免费素材网站无水印
  • 外贸站seoapp开发公司历程概述
  • 沈阳网站推广¥做下拉去118cr陶瓷企业 瓷砖地板公司网站建设
  • 医院网站官方微信精神文明建设我做服装设计师的 求推荐资源网站
  • 微信网站建设需要那些资料昆明cms模板建站
  • 安庆网站建设兼职中企动力是500强吗
  • 网站排名优化技巧基于网站的网络营销方法有哪些
  • 摄影素材网站做知识问答的网站
  • 中小企业网站建设济南兴田德润电话门店管理系统软件排行