我在网络上找到的大多数示例都更喜欢constexpr
(C ++ 11),consteval
和constinit
(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
上没有答案时,我对此不感兴趣。
答案 0 :(得分:4)
排序。
它是 decl-specifier-seq 的一部分,其中的说明符可以是任意顺序。这是允许您编写volatile int static long unsigned inline long const x = 1;
但是它不是声明符的一部分(尤其是 ptr-operator ),所以您不能进行int* constexpr x = nullptr;
。