【问题标题】:constexpr initialization of global variable [duplicate]全局变量的 constexpr 初始化
【发布时间】:2019-03-11 13:25:07
【问题描述】:

如果我有一个用存储声明的变量,即 int x;并通过调用 constexpr 函数对其进行初始化,它将具有在 main 中的任何代码开始执行之前确定的值。

constexpr int get_value() { return 5;}

int x = get_value();

int main() {
   return x;
};

【问题讨论】:

  • 关于 constexpr。是关于那个的另一个问题。
  • @BlairDavidson:constexpr 会如何改变?
  • @BlairDavidson constexpr 对于函数仅表示“至少有一组参数可以进行编译时评估”。无论如何,链接问题的答案清楚地表明初始化发生在main之前。
  • 您是否想删除它。
  • @BlairDavidson A:是 / Constant initialization 发生是因为:1x 是一个具有静态存储持续时间的变量; 2。其初始化get_value() 的完整表达式是core constant expression。它发生在程序执行之前as a consequence of program initiation顺便说一句,由于这个问题本身不仅仅是“存储时间”,它有它自己的价值,我认为这个问题也不应该被关闭。

标签: c++ constexpr


【解决方案1】:

在 C++20 中,您可以使用 constinit

constexpr int get_value() { return 5;}

// Still mutable, not constexpr but
// initialized with a value at compile time.
constinit int x = get_value();

int main() {
   return x;
};

【讨论】:

  • 我注意到在 gcc 中调试时我可以看到值是在 main 之前设置的
  • @BlairDavidson 我认为 GCC 还不支持 constinit
猜你喜欢
  • 2019-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-03
  • 1970-01-01
  • 1970-01-01
  • 2015-07-18
  • 1970-01-01
相关资源
最近更新 更多