当前位置:   article > 正文

C++从入门到精通——存储类

C++从入门到精通——存储类
  • 存储类类型

    • auto
    • register
    • static
    • extern
    • mutable
    • thread_local
  • auto
    使用auto常用在下面两种情况

    • 声明变量根据初始化表达式自动判断变量类型
    • 声明函数函数返回值的占位符
      代码示例

#include <iostream>

using namespace std;

//C++存储类
int main(){
//    1.auto类型
    auto f = 3.14;//double
    auto s = "hello world";
    auto x = new auto (8); //int


    cout<<f<<"\t"<<sizeof(f)<<endl;
    cout<<x<<"\t"<<sizeof(x)<<endl;

    cout<<s<<"\t"<<sizeof(s)<<endl;
    cout<<s<<"\t"<<strlen(s)<<endl;



    return 0;
}

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210628231837109.png)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • register存储类
  • 备注:不可应用一元的"&"符号,在寄存器内,无实际地址
#include <iostream>

using namespace std;

//C++存储类
int main(){

    {
//  变量最大尺寸等于寄存器的大小
        register int miles;
        miles = 5;
        cout<<&miles<<endl;
        cout<<miles<<endl;
    }
    return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • static 存储类
  • 存储类指示编译器在程序的生命周期内,保证局部变量依然存在,而不需要再每一次进入和离开作用域的时候进行创建和销毁。
  • 作用于类上时,导致一个该成员的副本被类的所有对象共享。


#include <iostream>

void test(void);
static int num = 10;

int main()
{
    while (num-){
        test();
    }
    return 0;
}


void test(){
    static int i = 0;
    i++;
    std::cout << "变量 i 为 " << i ;
    std::cout << " , 变量 count 为 " <<num << std::endl;


}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • extern

    • 提供了全局变量的引用,程序文件课件,对于无法初始化的变量会指向之前定义过的存储位置。
    • 可以在其他文件得到已定义变量或者函数的引用。
  • mutable存储类

    • 适用于类对象
  • thread_local

    • 可以与static或者extern合并
    • 只用于数据声明,不能用于声明或者定义
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/388365
推荐阅读
相关标签
  

闽ICP备14008679号