C++对C的增强


实用性”增强

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

C++中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义。

int main()
{
        inti = 0;
        printf("ddd");
        intk;
        return0;
}

register关键字增强

register关键字 请求编译器让变量a直接放在寄存器里面,速度快在c语言中 register修饰的变量 不能取地址,但是在c++里面可以。

1

register关键字的变化

register关键字请求“编译器”将局部变量存储于寄存器中,C语言中无法取得register变量地址。

在C++中依然支持register关键字,C++编译器有自己的优化方式,不使用register也可能做优化,C++中可以取得register变量的地址。

2

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

3

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

int main()
{
 register int a = 0;
 printf("&a = %x\n", &a);
 return 0;
}

函数检测增强

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

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

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

int g_var;

int g_var = 1;

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

struct类型加强

C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型。

C++中的struct是一个新类型的定义声明。

struct Student
{
    char name[10];
    int age;
};
int main(int argc, char *argv[])
{
    Student s1 = {"wan", 1};
    Student s2 = {"wan2", 2};   
    return 0;
}

C++中所有的变量和函数都必须有类型

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

总结:

在C语言中

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

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

        在C++中

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

C++更加强调类型,任意的程序元素都必须显示指明类型

------------------------------分割线------------------------------

C++ Primer Plus 第6版 中文版 清晰有书签PDF+源代码

读C++ Primer 之构造函数陷阱

读C++ Primer 之智能指针

读C++ Primer 之句柄类

将C语言梳理一下,分布在以下10个章节中:

  1. Linux-C成长之路(一):Linux下C编程概要
  2. Linux-C成长之路(二):基本数据类型
  3. Linux-C成长之路(三):基本IO函数操作
  4. Linux-C成长之路(四):运算符
  5. Linux-C成长之路(五):控制流
  6. Linux-C成长之路(六):函数要义
  7. Linux-C成长之路(七):数组与指针
  8. Linux-C成长之路(八):存储类,动态内存
  9. Linux-C成长之路(九):复合数据类型
  10. Linux-C成长之路(十):其他高级议题

本文永久更新链接地址: 

相关内容