存储类也可以认定为一种修饰符,这些说明符放置在它们所修饰的类型之前。定义了 C++ 程序中变量/函数的范围(可见性)和生命周期。共有以下几种存储类:
- auto
- register
- static
- extern
- mutable
- thread_local (C++11)
从 C++ 17 开始,auto 关键字不再是 C++ 存储类说明符,且 register 关键字被弃用。
auto 存储类:
自 C++ 11 以来,auto 关键字用于两种情况:声明变量时根据初始化表达式自动推断该变量的类型、声明函数时函数返回值的占位符。
C++98标准中auto关键字用于自动变量的声明,但由于使用极少且多余,在 C++17 中已删除这一用法。
#include <iostream>
#include <typeinfo> //使用typeid,但没有其实也可以
#include <cxxabi.h> //使用abi
using namespace std;
void StorageClass()
{
int a = 0; //int
auto f = 3.14; //double
auto s("hello"); //char const*
auto z = new auto(9); // int*
cout << abi::__cxa_demangle(typeid(a).name(),0,0,0 ) << &#