gpt4 book ai didi

c++ - 虚拟方法上的 g++ [[noreturn]]

转载 作者:行者123 更新时间:2023-12-01 14:49:40 24 4
gpt4 key购买 nike

我在尝试清除 g++ 编译器警告时遇到了一些麻烦。

说我有这门课:

class A
{
public:
[[noreturn]] virtual void will_throw() { throw 0; }
};

在一个非空函数中,我调用了 will_throw不回。

如果我按值(value)执行此操作,即:

int g()
{
A a;
a.will_throw();
}

然后我就没有 -Wreturn-type警告。

如果我通过指针来做:

int g()
{
A a;
A* aptr = &a;
aptr->will_throw();
}

然后我得到“警告:函数中没有返回语句返回非空[-Wreturn-type]”

如果我删除 virtual来自 A::will_throw 的声明然后在指针上调用它也不会产生警告。如果方法是纯虚拟的,则在引用上调用该方法似乎会产生警告,否则不会。

我找不到任何说明它应该如何工作的内容,并且这些情况都不会在 Clang 中产生警告。这是 GCC 中的错误吗?

最佳答案

由于函数是虚拟的,编译器不知道(没有跟踪赋值)通过指针(或引用)调用的是 A::will_throw而不是某些可能不是 noreturn 的覆盖函数.由于这只是一个警告,因此两种行为(或从不警告,或始终警告!)都符合要求。

关于c++ - 虚拟方法上的 g++ [[noreturn]],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58882878/

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