小工具知识网

当前位置: 首页 > 行业知识 > 浅谈CPP弥补了C的哪些缺陷(建议收藏)

行业知识

浅谈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 引用和指针的区别
            • 六、内联函数![在这里插入图片描述](https://m.xiaogongju.com.cn/uploads/202511/07/b26f30e1aee7ad27.webp)
              • 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 

上一篇:服务器繁忙很久怎么办?

下一篇:服务器怎么刷鞘翅?