c++ - C++20 中是否允许使用east constexpr / constinit / consteval?
问题描述
我在网上找到的大多数示例都更喜欢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 head 版本给出错误但在constinit
/上没有答案consteval
。
解决方案
有点。
它是decl-specifier-seq的一部分,其中的说明符可以是任何顺序。这是允许您编写的相同规则volatile int static long unsigned inline long const x = 1;
但它不是声明符的一部分(特别是ptr-operator),所以你不能做int* constexpr x = nullptr;
.
推荐阅读
- mysql - MySQL查询基于AND选择链接表中的项目
- javascript - HTML 视频无法读取包含西里尔符号的本地视频文件。我该如何解决这个问题?
- python - 如何在嵌套循环的每次迭代中存储信息?
- python - 使用 Sendgrid 或 Amazon SES 的 Django Web 应用程序邮件 - 不接收电子邮件
- python - sklearn ImportError:dll加载失败,内存不足(不可能)
- javascript - 孩子们使用回调依赖地狱
- java - How do I get my Kotlin Spring Boot project to run using java command?
- pydev - 将项目安装为 pip 开发包时导入错误?
- python - SQL“Max”有第二个(整数)参数是什么意思?
- excel-formula - 不包括周末和节假日并在周五之前显示