gpt4 book ai didi

c++ - 这是对 noreturn 属性的有效使用吗?

转载 作者:行者123 更新时间:2023-11-28 05:52:31 24 4
gpt4 key购买 nike

在处理线程(纤程)调度类时,我发现自己编写了一个永不返回的函数:

// New thread, called on an empty stack
// (implementation details, exception handling etc omitted)
[[noreturn]] void scheduler::thread() noexcept
{
current_task->state = running;
current_task->run();
current_task->state = finished;

while (true) yield();
// can't return, since the stack contains no return address.
}

这个函数永远不会被直接调用(通过thread();)。它仅在切换到新上下文后立即由汇编代码中的 jmp “调用”,因此它无法在任何地方“返回”。对 yield() 的调用最后会检查 state == finished 并将该线程从线程队列中移除。

这是否是对 [[noreturn]] 属性的有效使用?如果是这样,它会有任何帮助吗?

编辑:不是重复的。我了解该属性通常用于什么。我的问题是,在这种特定情况下它会做些什么吗?

最佳答案

我会说它有效但毫无意义。

它是有效的,因为函数没有返回。契约不能被破坏。

这是毫无意义的,因为该函数从未从 C++ 代码中调用过。所以没有调用者可以利用函数不返回的事实,因为没有调用者。并且在函数的定义点,编译器不需要您的帮助来确定 while 语句之后的代码已死,包括函数后缀(如果有的话)。

关于c++ - 这是对 noreturn 属性的有效使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34928473/

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