C++ auto 与 register、static 关键字 浅析

【register/auto的比较分析】

#include <iostream>  
using namespace std;  
int main(){  
        int i,sum=0;  
        for(i=0;i<=100;i++)  
                sum+=i;  
        cout<<"The sum="<<sum<<endl;  
}
#include <iostream>  
using namespace std;  
int main(){  
        register int i;  
        int sum=0;  
        for(i=0;i<=100;i++)  
                sum+=i;  
        cout<<"The sum="<<sum<<endl;  
}

<span style="font-family: 'Times New Roman'; font-size: 18px; background-color: rgb(255, 255, 255);">前边程序中的int i是默认的自动变量(auto),下面  register int i是寄存器变量</span>


register/auto区别

自动变量在程序调用的时候是分配临时的存储空间,调用的时候也是从内存中调用的,这也是和register最大的不同,register变量的值是存放在CPU中的寄存器中,调用时直接从寄存器中取出参加运算,存放在寄存器中的变量值调用需要的时间短,节省内从,如上面的简单程序用auto变量和register变量时没有多大区别的,在大型程序中这种节约才能体现的出来。


register定义

为提高执行效率,C++语言允许将局部变量的值放在运算器中的寄存器里,需要时直接从寄存器中取出参加运算,不必再到内存中去存取,这种变量叫做寄存器变量,用关键词register作说明为提高执行效率,C++语言允许将局部变量的值放在运算器中的寄存器里,需要时直接从寄存器中取出参加运算,不必再到内存中去存取,这种变量叫做寄存器变量,用关键词register作说明。

【auto类型(普通)static局部变量有三点不同】
1. 存储空间分配不同,auto类型分配在栈上,属于动态存储类别,占动态存储区空间,函数调用结束后自动释放;而static分配在静态存储区,在程序整个运行期间都不释放。两者之间的作用域相同,但生存期不同。
2. static局部变量在所处模块的初次运行时进行初始化工作,且只初始化一次。
3. 对于局部静态变量,如果不赋初值,编译期会自动赋初值0或空字符;而auto类型的初值是不确定的。(对于C++中的class对象例外,class的对象实例如果不初始化,则会自动调用默认构造函数,不管是否是static类型) 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值