请看这个片段:
struct [[nodiscard]] Result {
};
struct DiscardableResult: Result {
};
DiscardableResult
是否具有[[nodiscard]]
属性?如果是,是否有可能以某种方式删除它?
答案 0 :(得分:15)
[dcl.attr.nodiscard] / 2说:
nodiscard
调用是一个函数调用表达式,它调用先前声明为nodiscard
的函数,或者其返回类型可能是cv限定的类或标记为nodiscard
的枚举类型。
函数的返回类型是DiscardableResult
。此类型未标记nodiscard
,如[dcl.attr.grammar] / 5中所定义:
每个属性说明符-seq被认为属于某个实体或语句,由语法上下文所标识(第9条,第10条,第11条)。如果属于某个实体或语句的attribute-specifier-seq包含不允许应用于该实体或语句的属性或alignment-specifier,则该程序格式错误。如果属性说明符-seq附属于朋友声明(14.3),则该声明应为定义。没有attribute-specifier-seq属于显式实例化(17.7.2)。
强调补充。
DiscardableResult
的“句法上下文”中没有属性。因此,没有属性“附属于”此实体。
属性不会被继承。