博客做单页网站建站服务搭建的页面时

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

博客做单页网站,建站服务搭建的页面时,杭州软件开发公司排名,邱县网站建设目录 一命名空间#xff08;namespace#xff09;#xff1a; 二cout与cin简述#xff1a; 三缺省参数#xff1a; 四函数重载#xff1a; 五引用#xff1a; 六内联函数: 七c中的nullptr简述#xff1a; 一命名空间#xff08;namespace#xff09;#xff1… 目录 一·命名空间namespace 二·cout与cin简述 三·缺省参数 四·函数重载 五·引用 六·内联函数: 七·c中的nullptr简述 一·命名空间namespace namespace ns {int t 5; }//习惯写法namespace名字注末尾无这里相当于命名空间域访问的时候要ns内部的量 对于c域的理解可分为四大域函数局部域全局域命名空间域类域。 其中前两个影响编译逻辑和生命周期后两者不影响。 对于命名空间特点 首先它是可以嵌套的 namespace ns {int i 10;int a 10;namespace ne {int a 2;//命名空间的嵌套} } 这时如果访问ne内的a可以nsnea或者可以不完全展开即 using namespace ns::ne。 还有一个就是多文件定义同一个命名空间它会自动合并如 在头文件中定义一个ns命名空间在cpp中也存在ns命名空间同时在cpp调用就可以用到头文件中的ns。 对于standard 命名空间在iostream库里存在的cin cout 就定义在std这个命名空间里。 二·cout与cin简述 cin输入的数据自动识别为字符型cout输出也是类同。 前者配合后者配合由于是二元操作符故只能是两个操作数即里面要么是变量自动识别要么是字符串。 结合endlend line 都是存在于iostream库中的namespace std故可以对它展开或者std来使用。 int k 10; int e 0; int main() {std::cout k是 k endl;std::cin e k;std::cout k是 k endl;std::cout e是 e endl;} 为了提高io效率可以在程序中加入 ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);三·缺省参数 顾名思义就是对于函数有的参数没有的时候可以去固定值也可以输入 大致就是要从函数所有参数的右边开始缺省到左边但是不能跳跃当传参的时候省略的可传可不传。 using namespace std; namespace hs {int Func(int a, int b, int c 10) {return a b c;}} #if 0 int main() {cout hs::Func(1, 2) endl;} #endif 这里由于为给传参故用默认的即输出13。  四·函数重载 即重载在同一作用域下参数个数不同或者类型不同而函数名相同可以构成重载。通过调用函数的时候传参个数或者类型来取决调用哪个函数。 如 using namespace std; namespace hs {int Func(int a, int b, int c 10) {return a b c;}double Func(double a, int b, int c 11) {return a b c;} } #if 0 int main() {cout hs::Func(1.1, 2) endl;} #endif 这里调用的就是double类型的Func。参数类型不同 using namespace std; namespace hs {int Func(int a, int b) {return a b ;}int Func(int a, int b, int c 11) {return a b c;} } #if 0 int main() {cout hs::Func(1, 2) endl;} #endif 这里调用的就是第一个Func。参数个数不同当然也可以是参数顺序不同等等。 而函数重载是为了能调用的时候根据输入区分开不同的函数故当只有返回值不同时不能作为重载条件 void fxx() {}int fxx() {return 0; } 上面这样当调用的时候编译器无法区分。 void f1 () { cout f() endl; } void f1 ( int a 10) { cout f(int a) endl; }//由于参数是不同的可以构成重载但是调用的时候如果不输入编译器无法区分调哪一个。 五·引用 即类型引⽤别名引⽤对象 相当于给它取了一个新的名字但还是同一块内存区域即地址不变可以理解为改变的时候类似于指针操作。 因此就可以换一种方式交换两个数 namespace yy {int c 10;int b c;namespace jh {int m 1;int n 2;void swap(int a, int b) {int tmp a;a b;b tmp;}}} using namespace yy::jh; #if 0 int main() {cin yy::c;cout yy::b \n yy::c endl;cout m n endl;swap(m, n);cout m n endl; } #endif 这里通过这个引用把m n的值交换了但m n这块地址没有变通过m n找到对应的地址把里面的数据改变。因为ab是m n的别名故改变a b即改变m n 。 这里注意一旦引用实体不能再引用其他 int main() {int a 10;int b a;int d 11;b d;cout b b a a d d endl;return 0; } 这里可以看出a b还是同一块地址b指向的地址里数据只是对d数据的一次拷贝而不是让b这个实体再次引用d。  const引用对于权限引用范围可以缩小可以等同但不能放大 即 const int a10; const int ba;//等同int c10; const int dc;//缩小 这里虽然地址是同一个但访问权限不同。 再看着一个例子 const int a10; int da;//这里并非扩大访问只是把a值copy给d两者地址不同下面引出临对象所谓临时对象就是编译器需要⼀个空间暂存表达式的求值结果时临时创建的⼀个未命名的对象。 而当在c中经常会出现那么把它就要当成常性对待不可修改故用const修饰。 int a10;int b1; const int c(ab); //这里ab就是临时对象 再比如隐式类型转化出现的临时对象 double d 3.14; int i d; const int ra d; cout i ra endl; 六·内联函数: 即用inline修饰的函数设计出来代替宏 而宏采用直接替换不开辟空间但效率慢。 普通函数开辟多余空间即建立栈帧效率高。 而内联函数结合了这两点 即当使用内联函数如果遇到短小函数不复杂的则编译器按照宏的方式去直接替换但是遇到比如有递归等就会按照函数方式直接展开建立栈帧去执行如 namespace nl{inline int add(int a, int b) {return a b;}inline int Add(int a, int b) {if (a b 10) {return a b;}return Add(a3,b3)1;} } int main() {int m 1, n 2;cout nl::add(m, n) endl;//这里由于短小函数故采用类似宏的直接替换。cout nl::Add(m, n) endl;//这里由于出现了递归故采用直接展开即开辟一定空间。return 0; } 再如c库里面swap函数就用的inline修饰的内联函数 适用范围频繁调用的短小函数非递归。 七·c中的nullptr简述 C11中引⼊nullptrnullptr是⼀个特殊的关键字nullptr是⼀种特殊类型的字⾯量它可以转换 成任意其他类型的指针类型。使⽤nullptr定义空指针可以避免类型转换的问题因为nullptr只能被 隐式地转换为指针类型⽽不能被转换为整数类型。类似c中的NULL。 void f(int x) {cout f(int x) endl; } void f(int* ptr) {cout f(int* ptr) endl; }int main() {f(0);f(NULL);f(nullptr);return 0;} 这里对于c语言可能NULL可以这样但是c会直接识别为0故在这里c对空指针用nullptr。