行业知识
浅谈CPP弥补了C的哪些缺陷(建议收藏)
2026-10-24 10:04:26
来源:互联网转载
浅谈CPP弥补了C的哪些缺陷(建议收藏)
- 一、命名空间
- 1.1 命名空间的定义
- 1.2 命名空间使用
- 二、C++输入、输出
- 2.1 std命名空间的使用惯例
- 三、缺省参数
- 3.1 缺省参数的定义
- 3.2 缺省参数分类
- 四、函数重载
- 4.1 函数重载概念
- 4.2 C++支持函数重载的原理--名字修饰(name Mangling)
- 五、引用
- 5.1 引用概念
- 5.2 引用特性
- 5.3 常引用
- 5.4 使用场景
- 5.5 传值、传引用效率比较
- 5.6 引用和指针的区别
- 六、内联函数
- 6.1 概念
- 6.2 特性
- 6.3 面试题
- 七、auto关键字(C++11)
- 7.1 auto的使用细则
- 6.3 auto不能推导的场景
- 八、基于范围的for循环(C++11)
- 九、���针空值nullptr(C++11)
__
一、命名空间
在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存
在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是 对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字由此而生。
实例:
#include #include int rand = 10;// C语言没办法解决类似这样的命名冲突问题,所以C++提出了namespace来解决int main(){ printf("%d\n", rand);return 0;}// 编译后后报错:error C2365: “rand”: 重定义;以前的定义是“函数”1.1 命名空间的定义
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}
中即为命名空间的成员。
Tips:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。
// 1. 正常的命名空间定义namespace N1{ // 命名空间中可以定义变量/函数/类型 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. 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。//Queue.hnamespace N1{void QueueInit(){cout void StackInit(){cout // 命名空间中可以定义变量/函数/类型 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;} printf("%d\n", N::a);//::是作用限定符 return 0; } printf("%d\n", N::a); printf("%d\n", b); return 0; } printf("%d\n", a); printf("%d\n", b); Add(10, 20); return 0; }char c,int i,double d;//自动识别变量的类型cinci>>d;//输入c/i/dcout coutFunc(); // 没有传参时,使用参数的默认值0Func(10); // 传参时,使用指定的实参return 0;} cout cout} // 注意:如果生命与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省值。//正确://a.h void Func(int a = 10); // a.cpp void Func(int a ) {} cout cout Add(10, 20); Add(10.1, 20.2); return 0;} int a = 10; //引用类型必须和引用实体是同种类型的 int& ra = a;//int a = 10;//int& b; 该语句编译时会报错int& b = a;//定义时必须初始化//1个变量可以有多个引用(a被多次引用)int& c=a;int& d=a;//引用一旦引用一个实体,再不能引用其他实体int x=2;//这里c在前面已经引用了一个实体a,不能在引用x//所以此处c=x为赋值语句,而不是c引用实体xc=x;return 0;}int a = 0;return a;}int main(){const int& ret = func();//const引用后,会延长临时变量的生命周期const int a = 10;//int& b = a;//权限扩大int b = a;//赋值,只有涉及引用时,才会涉及权限问题const int& b = a;//平移int c = 12;const int& d = c;//缩小int i = 10;double d = i;const double d = i;//C/C++中,类型转化会将原值存放到一个临时变量中,而临时变量具有常性return 0;} int temp = left; left = right; right = temp;} static int n = 0; n++; return n;} int c = a + b; return c;}int main(){ int& ret = Add(1, 2); Add(3, 4); cout int a[10000]; };void TestFunc1(A a) {};void TestFunc2(A& a) {};void TestRefAndValue(){A a;// 以值作为函数参数size_t begin1 = clock();for (size_t i = 0; i
上一篇:服务器繁忙很久怎么办?
下一篇:服务器怎么刷鞘翅?