是否继承了C ++类型属性?

时间:2018-08-04 03:12:38

标签: c++ c++11

我认为它实际上不是Are function attributes inherited?的副本,因为我想知道类,而不是成员函数:

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

critical_error foo();

int main() {
   foo(); // no warning.
}

似乎[[nodiscard]]属性在这里没有继承。所有类型属性都一样吗?

1 个答案:

答案 0 :(得分:1)

不是,就像您断言的那样。该标准是明确的,它确切地是从基类继承到派生类的:

  

10.6派生类[class.derived]

     

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

出于完整性考虑:specific section about attributes中也没有关于继承的措辞。

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