[[noreturn]]
属性可以应用于不打算返回的函数。例如:
[[noreturn]] void will_throw() { throw std::runtime_error("bad, bad, bad ...."); }
但我遇到了以下情况(不,这不是我设计的):
class B {
public:
virtual void f() { throw std::runtime_error(""); }
};
class D : public B {
void f() override { std::cout << "Hi" << std::endl; }
};
我真的想把属性[[noreturn]]
放在B::f()
声明上。但我不清楚派生类中的覆盖会发生什么。从[[noreturn]]
函数成功返回会导致未定义的行为,如果覆盖也继承了该属性,我当然不希望出现这种情况。
这个问题:通过覆盖[[noreturn] virtual void B::f()
,我是否继承了[[noreturn]]
属性?
我查看了C++14标准,但在确定属性是否继承时遇到了问题。
https://stackoverflow.com/questions/32655526
复制相似问题