自 C++23 起使用 std::is_constant_evaluated()

问题描述 投票:0回答:1

我知道

std::is_constant_evaluated()
对于确定 C++20 中的编译时评估很有用。

但从 C++23 开始,我们有了

if consteval

但是没有提及

std::is_constant_evaluated()
的弃用。

从C++23开始有什么实际用途吗?

c++ c++20 c++23 consteval
1个回答
0
投票

引自论文

在讨论本文时经常出现的问题之一是:如果我们有

if consteval
,我们是否还需要
std::is_constant_evaluated()
,我们可以弃用它吗?

本文不建议进行此类弃用。原因是这个函数实际上偶尔还是有用的(如上一节)。如果标准库没有提供,用户就自己编写。我们并不关心它的实现难度——需要这个的用户肯定能够正确地编写它——但我们关心的是这个功能的扩散。拥有

std::is_constant_evaluated()
的优点是它既变得实际上是可教导的,又变得可警告:所讨论的警告只会发生,因为我们知道这个名字的含义。也许仍然可以在
if constexpr (your::is_constant_evaluated())
上发出警告,但这是一个更难的问题。

请注意,libstdc++ 已经有 some uses 确实需要函数形式。

© www.soinside.com 2019 - 2024. All rights reserved.