【问题标题】:Do all constants have static duration?所有常量都有静态持续时间吗?
【发布时间】:2018-04-15 04:20:48
【问题描述】:

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

例如

const int a = 3;     

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

a和b有什么区别?

【问题讨论】:

  • 静态持续时间是什么意思?
  • 我知道字符串文字可以,我看到了一个与此相关的问题。不知道这是否适用于其他简单类型,但我怀疑它确实如此。这实际上是一个很好的问题。
  • @MarkRansom 其他类型的字面量(用户自定义字面量除外)在抽象机中不占用任何内存,也没有存储时长。
  • 如果您谈论的是常量变量而不是文字,那么没有 AFAIK。为什么会这样?常量变量不被初始化为编译时常量是完全正常的。

标签: c++ static constants


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    然而,constexpr 对象不能有非平凡的构造函数或析构函数,也不能初始化为编译时已知的常量以外的任何东西,因此它可以以与 static 变量相同的方式实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      • 2020-02-17
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      • 1970-01-01
      相关资源
      最近更新 更多