我认为它实际上不是Are function attributes inherited?的副本,因为我想知道类,而不是成员函数:
struct [[nodiscard]] error {};
struct critical_error : error {};
critical_error foo();
int main() {
foo(); // no warning.
}
似乎[[nodiscard]]
属性在这里没有继承。所有类型属性都一样吗?
答案 0 :(得分:1)
不是,就像您断言的那样。该标准是明确的,它确切地是从基类继承到派生类的:
10.6派生类[class.derived]
2 [...]除非在派生类中重新声明,否则基类的成员也被视为派生类的成员。 除构造方法外,基类的成员被认为是派生类的继承。 基类的构造方法也可以按照[namespace.udecl]中的描述进行继承。 可以以与派生类的其他成员相同的方式在表达式中引用继承的成员,除非它们的名称是隐藏的或不明确的([class.member.lookup])。
出于完整性考虑:specific section about attributes中也没有关于继承的措辞。
基本上:属性不是类或构造函数的成员,因此不能继承。