我几乎可以肯定这个问题以前已经被问过。不幸的是,我的 C++ 已经变得如此生疏,我什至不知道要搜索什么。
是否有一个易于记住的经验法则可以告诉我哪些限定符(inline
, virtual
, override
, const
, mutable
等)必须出现(a)仅在声明中,(b)仅在定义中,(c)当我定义成员函数时,声明和定义都出现在行外?
Example:
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 { … }
- The
virtual
and override
可能会出现预选赛only在声明中。
-
const
必须出现在both声明和定义。
我不想永远依赖试错。但我想明确限定符(即重复它们,即使它们是由基类隐含的。)是否存在限定符必须准确到达何处的一般规则,或者每个限定符的规则是否不同?
一般规则是,当删除限定符产生不同的函数重载时,该限定符必须出现在两个位置。所有其他限定符都保留在声明中。
两个地方都必须出现的三个限定符是const
以及 C++11 标准中出现的两种引用限定符:
void foo() const;
void foo() &;
void foo() &&;
所有其他限定符都保留在声明中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)