gpt4 book ai didi

c++ - [[noreturn]] 函数如何具有返回类型?

转载 作者:可可西里 更新时间:2023-11-01 16:26:17 24 4
gpt4 key购买 nike

我遇到了这个“高可读性”和“优雅”代码的“美丽”示例,但我在理解它时遇到了麻烦:

struct S {

[[noreturn]] virtual inline auto f(const unsigned long int *const)
–> void const noexcept;
};

以下是我的理解(如有错误请指正):

  • f()S
  • 的成员函数
  • virtual - 可以被派生类覆盖
  • inline - 编译器应该尝试生成代码来调用 f 而不是正常调用它
  • const - 该函数无法更改 S 的任何成员
  • noexcept - 函数永远不会抛出(不能抛出或不允许抛出)
  • 参数:const 指针,指向 const unsigned long int
  • auto .... -> void - 后缀返回类型 void
  • [[noreturn]] - 它永远不会返回

以下是我的主要担忧:

  • 如果一个函数被声明为[[noreturn]],它从不返回给它的调用者;那么它怎么会有返回类型 void 呢?无论如何,此函数中的返回类型有什么意义?
  • 例如,此代码会使用 int 而不是 void 进行编译吗?
  • 这样的函数有什么实际用途?抛出异常?
  • 此函数执行完成后(} 之后)代码流向何处?

我无法让这段代码在 VS2013 预览版上运行,所以我猜这些功能还没有实现。

我对此很好奇,所以如果有人能解释一下,我将不胜感激!干杯

最佳答案

[[noreturn]] 是一个具有任何语义的属性。然而,它并没有改变函数的声明方式:C++ 中的所有普通函数(即,除了构造函数、析构函数和转换运算符之外的所有函数)都有一个声明的返回类型。添加任何属性都不会更改此规则。

[[noreturn]] 属性的目的可能是指示该函数永远不会以正常方式返回。鉴于该函数也被声明为 noexcept 这基本上意味着相应的函数也不能抛出异常。 exit() 是具有类似行为的函数的一个示例,它终止了程序。我可以想象实现某种应用程序循环的函数也可以符合条件。在任何情况下,[[noreturn]] 都会告诉系统相应的函数永远不会正常返回,即从函数中退出(“在 } 之后”)可能会导致未定义的行为。

关于c++ - [[noreturn]] 函数如何具有返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18351605/

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