第2课-C到C++的升级

1. C与C++的关系

  • C++继承了所有的C特性

  • C++在C的基础上提供了更多的语法和特性

  • C++的设计目标是开发效率与运行效率的统一

 

 

 

2. C到C++的升级

  • C++更强调语言的实用性

  • 所有的变量都可以在需要使用时定义

#include <stdio.h>

int main()
{
    int c = 0;
    
    for(int i = 1; i <= 3; i++)
    {
        for(int j = 1; j <= 3; j++)
        {
            c += i * j;
        }
    }
    
    printf("c = %d\n", c);
  
return 0; }

对比:C语言中的变量都必须在作用域开始的位置定义!!!

 

  • register关键字请求编译器将局部变量存储于寄存器中

    - 在C++中依然支持register关键字

    - C++编译器有自己的优化方式

      (1) C语言中无法获取register变量的地址

      (2) C++中可以取得register变量的地址

  • C++中的register关键字

    - C++编译器发现程序中需要去register变量的地址时,register对变量的声明变得无效

    - 早期C语言编译器不会对代码进行优化,因此register变量是一个很好的补充

#include <stdio.h>

int main()
{
    register int a = 0;
    
    printf("&a = %p\n", &a);    // 在C编译中会报错,C++编译中不会
    
    return 0;
}

 

  • 在C语言中,重复定义多个同名的全局变量是合法的

  • 在C++中,不允许定义多个同名的全局变量

int g_v;
int g_v;    // 在C++编译中出错,在C编译器中OK

int main()
{    
    return 0;
}

PS:

(1) C语言中多个同名的变量最终会被链接到全局数据区的同一个地址空间

(2) C++直接拒绝这种二义性的做法

 

  • struct关键字的加强

    - C语言中的struct定义了一组变量的集合

    - C语言中struct定义的标识符并不是一种全新的类型

    - C++中的struct用于定义一种全新的类型

 

 

  • 面试中的小问题

    - int f()和int f(void)有区别吗?如果有,区别是什么?

 

  • C++中所有的标识符都必须显示的声明类型

  • C语言中的默认类型在C++中是不合法的

#include <stdio.h>

f(i)
{
    printf("i = %d\n", i);
}

g()
{
    return 5;
}

int main()
{

    return 0;
}
  • 问题:

    (1) 函数f的返回值和参数分别是什么类型?

    (2) 函数g可以接受多少个参数?

 

  • 在C语言中

    - int f()表示返回值为int,接受任意参数的函数

    - f(void)表示返回值为int的无参函数

  • 在C++中

    - int f()和int f(void)具有相同的意义表示返回值为int的无参函数

 

 3. 小结

  • C++更强调实用性可以在任意地方声明变量

  • C++中的register只是一个兼容的作用

  • C++编译器能够更好的进行优化

  • C++中的标识符都必须显示的指明类型

 

本文出处:狄泰软件学院

posted @ 2020-03-07 18:39  WisdomMan  阅读(2)  评论(0)    收藏  举报