我想知道C ++中的所有常量是否都有静态持续时间,即使它们是在main()以外的函数内创建的?
例如
const int a = 3;
int main()
{
const int b = 4;
}
a和b之间有什么区别?
答案 0 :(得分:2)
对象是否为const
以及它是否具有静态存储持续时间是不相关的。除非明确标记为static
或thread_local
,否则函数内定义的对象具有自动存储持续时间。除非明确标记thread_local
,否则类的静态数据成员具有静态存储持续时间。除非明确标记thread_local
,否则在命名空间范围内定义的对象具有静态存储持续时间。
答案 1 :(得分:0)
没有;如果您使用构造函数和析构函数创建const
对象,这将是最清楚的,当程序进入并离开声明自动const
对象的作用域时将调用该对象。 const
自动变量在每次调用函数时也可以根据参数或其他运行时数据使用不同的值,而static const
局部变量则不能。
但是,constexpr
对象不能具有非平凡的构造函数或析构函数,或者在编译时被初始化为除常量之外的任何东西,因此它可以与static
变量相同的方式实现。