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

Are C++ type-attributes inherited?

本文关键字:继承 属性 类型 C++      更新时间:2023-10-16

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

struct [[nodiscard]] error {};
struct critical_error : error {};
critical_error foo();
int main() {
foo(); // no warning.
}

这里似乎没有继承[[nodiscard]]属性。是否所有类型属性都相同?

正如您自己断言的那样,它们不是。该标准明确了从基类到派生类的确切继承内容:

10.6派生类〔class.Derived〕

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

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

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