【问题标题】:Is it possible to declare a constexpr pointer instead of a pointer to constexpr?是否可以声明一个 constexpr 指针而不是指向 constexpr 的指针?
【发布时间】:2019-10-06 17:13:42
【问题描述】:

这样说对吗

constexpr int* p = nullptr;

声明 constexpr 指针(而不是指向 constexpr int 的指针)?

这个定义

int* constexpr p = nullptr;

给出编译错误。

【问题讨论】:

  • 情况正好相反。尝试从右到左阅读。

标签: c++ c++11 constexpr


【解决方案1】:

标准在[dcl.constexpr]/1 中规定,只有变量或函数(及其模板)可以是constexpr

constexpr 说明符应仅应用于变量或变量模板的定义或函数或函数模板的声明。

特别是,constexpr 不是类型系统的一部分(尽管它确实暗示了const),所以指针到 constexpr 在 C++ 中不是一个有意义的概念。

将变量标记为constexpr 的主要原因是将它们设为usable in constant expressions。但是,也可以使用在常量表达式中使用常量初始化器初始化的引用和常量整数值。也许参考部分可以帮助您解决您正在处理的任何问题?

【讨论】:

  • @asynts 已修复。但是如果它消耗了最早的括号,它不应该使用第一个作为链接,第二个作为文本吗?
  • @asynts 好的,这是有道理的,但是“向后”是一个非常重要的细节;)
猜你喜欢
  • 2012-05-09
  • 2016-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-21
  • 2021-05-22
相关资源
最近更新 更多