C ++ 20中允许使用constexpr / constinit / consteval吗?

时间:2019-09-20 18:04:19

标签: c++ c++20

我在网络上找到的大多数示例都更喜欢constexpr(C ++ 11),constevalconstinit(C ++ 20)的“西方风格”:

consteval auto sqr(int n) {
  return n*n;
}
constexpr auto r = sqr(100);  // OK
constinit static auto x = r; 

由于我不是语言律师,所以我有以下问题: 这些说明符是否允许使用“东方风格”?示例:

auto consteval sqr(int n) {
  return n*n;
}
auto constexpr r = sqr(100);  // OK
static auto constinit x = r; 

要明确:我无意发动“西方” /“东方”语言战争。我对观点不感兴趣,实际上,尤其是当wandbox上的clang和gcc头版本此时给出错误但在constinit / consteval上没有答案时,我对此不感兴趣。

1 个答案:

答案 0 :(得分:4)

排序。

它是 decl-specifier-seq 的一部分,其中的说明符可以是任意顺序。这是允许您编写volatile int static long unsigned inline long const x = 1;

的相同规则

但是它不是声明符的一部分(尤其是 ptr-operator ),所以您不能进行int* constexpr x = nullptr;