我几乎可以肯定,这已经被问过了。不幸的是,我的C ++变得如此生锈,以至于我什至都不知道要搜索什么。
是否有一个容易记住的经验法则会告诉我哪个预选赛(inline
,virtual
,override
,const
,mutable
,等)必须出现(a)仅在声明中,(b)只在定义,(三)无论是在脱机定义成员函数时的声明和定义?
struct Geometry {
…
virtual Geometry* clone() const = 0;
};
struct Point2 : public Geometry {
…
virtual Point2* clone() const override { … }
};
如果我想定义Point2::clone
离线,反复试验会使我相信这将是正确的代码:
struct Point2 : public Geometry {
…
virtual Point2* clone() const override;
};
Point2* Point2::clone() const { … }
virtual
和override
预选赛可能会出现只有在声明。const
必须出现在双方的声明和定义。我不想永远依靠反复试验。但是我想对限定符进行明确说明(即,即使例如基类隐含了限定符,也要重复使用它们)。是否存在一个通用规则,即哪些限定符必须精确地定位在哪里,或者每个规则是否不同?
一般规则是,删除限定符时会产生不同的函数重载,该限定符必须同时出现在两个位置。所有其他限定词都保留在声明中。
在两个地方都必须出现的三个限定符是const
和两种参考限定符,它们出现在C ++ 11标准中:
void foo() const;
void foo() &;
void foo() &&;
所有其他限定词都保留在声明中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句