【问题标题】:Are C++ type-attributes inherited? [duplicate]C++ 类型属性是继承的吗? [复制]
【发布时间】:2018-08-04 03:12:37
【问题描述】:

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

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

critical_error foo();

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

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

【问题讨论】:

  • 您的意思是使用您在函数返回类型中定义的类之一吗?

标签: c++ c++11


【解决方案1】:

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

10.6 派生类[class.derived]

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

为了完整起见:specific section about attributes 中也没有关于继承的措辞。

基本上:属性不是类的成员,也不是构造函数,所以不能被继承。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多