02 - C到C++的升级

---- 整理自狄泰软件唐佐林老师课程

1. C与C++的关系

C++继承了所有的C特性
C++在C的基础上提供了更多的语法和特性
C++的设计目标是 运行效率和开发效率 的统一

02 - C到C++的升级_第1张图片

2. C到C++的升级

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

所有的变量都可以在需要时再定义
对比:C语言中的变量都必须在作用域开始的位置定义(C99标准除外)

2.2 register关键字

register请求编译器将局部变量存储于寄存器

  • 在C++中依然支持register关键字
  • C++编译器有自己的优化方式
     – C语言中无法获取register变量的地址
     – C++中可以取得register变量的地址

C++中的register关键字

  • C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效,也即忽略register关键字。

2.3 重复定义

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

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

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

 – C++直接拒绝这种二义性的做法

2.4 编程实验

上述2.1、2.2、2.3实验:

#include 

int g_v;
//int g_v;

int main(int argc, char *argv[])
{
    printf("Begin...\n");
    
    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);
    
    register int a = 0;
    
    printf("&a = %p\n", &a);
    
    printf("End...\n");
    
    return 0;
}

02 - C到C++的升级_第2张图片

2.5 struct关键字的加强

C语言中的struct定义了一组变量的集合, C语言中struct定义的标识符并不是一种新的类型

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

02 - C到C++的升级_第3张图片

  • 思考:
    int f() 与 int f(void) 有区别吗?如果有,区别是什么?

2.6 函数声明

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

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

  • C语言 中:
    – int f() 表示返回值是int,接受 任意参数 的函数
    f(void) 表示返回值为int的 无参 函数
  • C++ 中:
    – int f() 和 int f(void) 具有相同的意义:表示返回值为int的 无参 函数

2.7 实验:2.4和2.5相关

#include 

struct Student
{
    const char* name;
    int age;
};

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

g()
{
    return 5;
}


int main(int argc, char *argv[])
{
    Student s1 = {"Delphi", 30};
    Student s2 = {"Tang", 30};
    
    f(10);
    
    printf("g() = %d\n", g(1,2,3,4,5));
    
    return 0;
}

02 - C到C++的升级_第4张图片

3. 小结

C++更强调实用性,可以在任意的地方声明变量
C++中的register只是一个兼容的作用
C++编译器能更好的进行优化
C++中的任意标识符都 必须显式的指明类型

你可能感兴趣的:(C++深度解析教程,c++,c语言)