c++中register关键字的增强

实用性的增强:

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

1 void main()
2 {
3     int a = 0;
4     printf("hell0\n");
5     int b = 13;   //c编译器中编译报错;但是c++编译器中不会报错     
6 }

 

register关键字的增强:

首先,register变量必须是能被CPU所接受的类型。这通常意味着register变量必须是一个单个的值,并且长度应该小于或者等于整型的长度。不过,有些机器的寄存器也能存放浮点数。

register:这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率。注意是尽可能,不是绝对

c语言中,register关键字表示“请求”(不一定成功)让变量直接放进寄存器中,方便访问。但是c语言中不能对这中变量取地址运算。

c++中,对register进行了增强,c++编译器会对频繁被调用的变量主动申请为register,即使你没有用register申明,它也会这样做。c++编译器发现程序中需要对register变量取地址时,register对变量的声明变得无效。

int main22()
{
    register int a = 0;

    printf("&a = %x\n", &a);

    system("pause");
    return 0;
}

 

函数检测增强:

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

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

int g_var;

int g_var = 1;//C++直接拒绝这种二义性的做法。

 

struct类型的增强:

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

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

struct Student
{
    char name[100];
    int age;
};

int main(int argc, char *argv[])
{
    Student s1 = {"wang", 1};                  //c编译器编译报错
    struct Student s_1 = {"wang_1", 1};  //c编译器正确识别
    Student s2 = {"wang2", 2};    
    return 0;
}

 

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

 c语言默认数据类型在c++编译器中是不合法的,c++中所有变量和函数必须写明类型。

f(i)    //c编译器认为合法
{
    printf("i = %d\n", i);

}

g()
{
    return 5;
}

int main(int argc, char *argv[])
{
    f(10);

    printf("g() = %d\n", g(1, 2, 3, 4, 5));


    getchar();    
    return 0;
}

 

posted @ 2016-10-17 13:36  e-data  阅读(161)  评论(0)    收藏  举报