gpt4 book ai didi

c++ - 为什么要检查 [[noreturn]] 函数的返回类型?

转载 作者:太空宇宙 更新时间:2023-11-04 15:33:54 25 4
gpt4 key购买 nike

假设我有一个签名为 [[noreturn]] void die(int exit_code); 的函数。如果我写声明:

check_some_condition() or die(EXIT_FAILURE);

我收到一条错误消息(使用 GCC 5.4.0):

error: expression must have bool type (or be convertible to bool)

但是为什么要检查类型,如果编译器知道进入那个函数,返回值就无关紧要了;如果条件成立,返回类型又不重要了吗?

编辑:关于[[noreturn]] 的标准措辞是否没有解决这一点,即放宽对类型的要求以使此类表达式“合法化” ?

最佳答案

您正在寻找的概念称为 bottom type .在类型系统中,底层类型是可以转换为任何其他类型的类型。 (还将它与 top type 进行比较,所有类型都可以转换为它。)

底部类型非常适合不返回的函数。将它赋值给任何东西都是类型安全的,正是因为无论如何赋值都不会发生。如果 C++ 有一个底部类型,并且如果您将函数声明为返回底部类型,那么您的代码片段可能是完全合法的,您的期望也是正确的。

不幸的是,C++ 没有这样的类型。正如已经指出的那样,[[noreturn]] 不是一种类型——它是一种属性,用于以与类型系统正交的方式表达意图(对其他程序员和优化器) .就类型检查器而言,函数的返回类型仍然是 void,无法转换为 bool 值。

关于c++ - 为什么要检查 [[noreturn]] 函数的返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40524834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com