所有常量都有静态持续时间吗?

时间:2018-04-15 04:20:49

标签: c++ static constants

我想知道C ++中的所有常量是否都有静态持续时间,即使它们是在main()以外的函数内创建的?

例如

const int a = 3;     

int main()
{
    const int b = 4;
}

a和b之间有什么区别?

2 个答案:

答案 0 :(得分:2)

对象是否为const以及它是否具有静态存储持续时间是不相关的。除非明确标记为staticthread_local,否则函数内定义的对象具有自动存储持续时间。除非明确标记thread_local,否则类的静态数据成员具有静态存储持续时间。除非明确标记thread_local,否则在命名空间范围内定义的对象具有静态存储持续时间。

答案 1 :(得分:0)

没有;如果您使用构造函数和析构函数创建const对象,这将是最清楚的,当程序进入并离开声明自动const对象的作用域时将调用该对象。 const自动变量在每次调用函数时也可以根据参数或其他运行时数据使用不同的值,而static const局部变量则不能。

但是,constexpr对象不能具有非平凡的构造函数或析构函数,或者在编译时被初始化为除常量之外的任何东西,因此它可以与static变量相同的方式实现。