C到C++的升级

C++ 的加强主要表现在:类型的加强、面向对象支持

1、变量定义

C++更强调语言的实用性,所有的变量都可以再需要使用的时候再定义,C语言中的变量都必须在作用域开始的位置定义

int c = 0;
for (int i = 1; i < 3; i++)
{
    for (int j = 1; j < 3; j++)
    {
        c += i * j;
    }
}

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

  • 在C++中依然支持register关键字
  • C++ 编译器有自己的优化方式

    • C语言中无法获取register变量的地址
    • C++中可以取得register变量的地址

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

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

2、同名变量

在C语言中,重复定义多个同名的全局变量是合法的,多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上。

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

3、struct关键字的加强

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

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

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

// C语言
typedef struct _tag_student Student;    
// 将struct _tag_student类型起了一个别名Student
struct _tag_student{
    const char * name;
    int age;
}

// C++
// struct定义一个全新的类型
struct Student
{
    const char * name;
    int age;
};

4、小思考

int f()int f(void)的区别:有没有区别,要看用什么编译器

  • 如果用C语言编译器,int f()的函数类型是返回值为int,接收参数是任意个数参数;int f(void)表示返回值为int,不接收任何参数
  • 在C++中,这两种写法没有区别,都表示返回值为int,不接收任何参数

5、默认类型

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

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

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

在C语言中:

  • int f()表示返回值为 int, 接收任意参数的函数
  • f(void)表示返回值为int的无参函数

在C++中:

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

C++中无默认类型,如果没有参数,就是不接受任何参数,int f(void)只是为了兼容C语言

C++ 不接受无返回值类型的函数,不允许默认类型

#include <stdio.h>

// c++中,定义了一个新的类型Student
struct Student
{
    const char* name;
    int age;
};

// C++中有问题,不合法
f(i)
{
    printf("i = %d\n", i);
}

// C++不合法
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;
}

6、总结

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

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

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

C++中地任意标识符都必须显示地指明类型

c++

相关推荐