C++ 类型属性是继承的吗?

dvr*_*r33 6 c++ c++11

我认为这并不是真正的函数属性是否继承的重复?,因为我想知道类,而不是成员函数:

struct [[nodiscard]] error {};
struct critical_error : error {};

critical_error foo();

int main() {
   foo(); // no warning.
}
Run Code Online (Sandbox Code Playgroud)

看来[[nodiscard]]这里的属性没有被继承。所有类型属性都相同吗?

Cás*_*nan 3

正如您自己所断言的那样,它们并非如此。该标准明确规定了从基类继承到派生类的具体内容:

10.6 派生类 [class.driven]

2 [...] 除非在派生类中重新声明,否则基类的成员也被视为派生类的成员。基类中除构造函数之外的成员被认为是由派生类继承的。基类的构造函数也可以被继承,如 [namespace.udecl] 中所述。继承的成员可以在表达式中以与派生类的其他成员相同的方式引用,除非它们的名称是隐藏的或不明确的 ([class.member.lookup])。

为了完整起见:在关于属性的特定部分中也没有关于继承的措辞。

基本上:属性不是类或构造函数的成员,因此不能继承。