zoukankan      html  css  js  c++  java
  • C++ auto 与 register、static keyword 浅析

    【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类型) 

  • 相关阅读:
    Python 30分钟入门——数据类型 and 控制结构
    类球多面体生成——经纬划分法
    GLUT的简洁OO封装
    Resource Acquisition Is Initialization(RAII Idiom)
    为什么operator>>(istream&, string&)能够安全地读入长度未知的字符串?
    斯坦福2014机器学习笔记六----神经网络(一)
    斯坦福2014机器学习笔记五----正则化
    斯坦福2014机器学习笔记四----逻辑回归
    斯坦福2014机器学习笔记三----多变量线性回归与梯度下降法
    斯坦福2014机器学习笔记二----梯度下降法
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/6925646.html
Copyright © 2011-2022 走看看