问题标签 [consteval]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - consteval 包装器与 source_location
我在 C++20 模式下使用 GCC10 尝试了以下第一个变体:
我期望以下输出:
但我得到了:
然后我尝试了以下第二个变体:
我期望以下输出:
但我得到了:
为什么代码会这样?有没有办法让它在不使用预处理器宏的情况下按预期运行?
更新:使用 'constexpr' 或 'inline' 而不是 'consteval' 的第二个变体适用于最新的 GCC。所以剩下的问题是:为什么“consteval”不能正常工作?有人告诉我这不是一个标准问题,而是一个实施主题,所以我将把这个问题重新标记为 GCC。
c++ - consteval 如何影响默认参数的评估?
在下面的代码中,如果here()
停止存在consteval
(完整的 RT 或constexpr
),则为insideline()
的调用行。但有了它的定义。这种差异从何而来?f()
main()
consteval
f()
c++ - 什么时候使用 constinit 和 consteval?
的用法constexpr
非常简单,即确保可以在编译时评估代码本身。
但是 C++ 20 的最新特性提供constinit
并且consteval
有点令人困惑。constinit
有人可以提供and的实际用例consteval
吗?
c++ - 有没有办法在 constexpr/consteval 上下文中访问已知大小的任意数据作为 char 数组?
我正在尝试实现一些将接收任意位数据(在编译时已知)并将它们的 CRC 计算为 a 的consteval
东西,因此我可以使用它来例如用整数键索引此类数据,而无需任何运行时开销。当输入是字符字符串文字时,我让它工作,但是当输入是字符串文字时,我正在努力让它工作wchar_t
。
我收到一个相当神秘的错误......
error: accessing value of '"T\000e\000s\000t\000\000"' through a 'const char' glvalue in a constant expression
...这似乎是由在 constexpr 上下文中使用 reinterpret_cast 引起的(这显然是不允许的)
我的问题是,有没有办法将任意数据解释为普通的旧字节数组?我不在乎它有多丑陋或缺乏可移植性(只要这一切都发生在编译时)。现在,只需使用数组wchar_t
作为输入来解决这个问题就足够了。显然,我可以“只是”为我想单独处理的每种类型重新实现 CRC 计算,但如果可能的话,我宁愿不这样做(事实上,对于比 POD 数组更复杂的任何事情,这将非常棘手)
作为参考,失败的代码如下:
c++ - 为什么 constexpr 函数不能使用 consteval 函数,而您可以从 consteval 函数创建 constexpr 对象?
您可以在 consteval 中使用 constexpr 对象,但不能在 constexpr 中使用 consteval。
为什么?
我认为 consteval 应该是某种“狭义”的 constexpr。
请帮助我理解这个设计。
[直播]
c++ - C++ 中的编译时调试
在这条准则下constexpr everything
,随着consteval
C++20 的引入,越来越多的代码在编译时被评估。
这就引出了一个明显的问题:我们如何调试它?
目前,唯一的提示是编译器错误。但是如果代码编译了,但仍然没有达到预期的效果怎么办。有什么工具可以帮助解决这个问题吗?有什么检查的可能吗?
一个相关的问题是:如何知道哪些会在编译时真正“执行”,哪些会在运行时保留,尽管有限定符。
c++ - consteval vs constexpr 变量
constexpr
和有什么区别consteval
吗?
使用 constexpr 比使用 consteval 更好吗?
c++ - decltype(fun()) 用于 consteval 方法
考虑以下代码。我可以用 GCC 10.2.0 和 Clang 11.0.0 编译它(如预期的那样):
如果我替换constexpr
为consteval
,那么 Clang 会抱怨std::remove_cvref_t<decltype(fun())>
:
错误:不能在立即调用之外获取 consteval 函数 'fun' 的地址
GCC 编译它就好了。为什么?