从 C++20 开始,我们可以使用 consteval 说明符来定义即时函数。当一个函数声明为 consteval 时,每次调用该函数都必须产生编译时常量,否则程序就是非法的。此外,自从 C++20 开始,常量求值上下文中允许使用 try-catch 块,但仍然禁止抛出异常。由于这个原因,我最初认为 consteval 暗示 inline,它也暗示 noexcept,因为抛出任何异常都是被禁止的。正如你现在所想象的那样,这是不正确的:除非你指定了 noexcept,否则一个即时函数就是一个可能抛出异常的函数,具有这种特性所带来的所有负面影响。我是否有不知道的原因呢?
consteval
函数应该是noexcept
的?即使打破正交性,您将获得哪些好处? - Barry