gpt4 book ai didi

c++ - 在外联定义成员函数时,哪些限定符必须出现在声明/定义/两者中?

转载 作者:太空狗 更新时间:2023-10-29 20:54:33 24 4
gpt4 key购买 nike

我几乎可以肯定以前有人问过这个问题。不幸的是,我的 C++ 已经生锈到我什至不知道要搜索什么。

是否有一个易于内存的经验法则可以告诉我哪些限定符(inlinevirtualoverrideconst, mutable 等)必须出现在(a)只在声明中,(b)只在定义中,(c)当我定义一个成员函数越界?

示例:

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 { … }
  • virtualoverride 限定符只能出现在声明中。
  • const 必须出现在声明和定义中。

我不想永远依赖反复试验。但我想明确说明限定符(即重复它们,即使它们由基类暗示。)是否有一个通用规则,限定符必须准确地去哪里,或者每个规则是否不同?

最佳答案

一般规则是,当删除限定符产生不同的函数重载时,该限定符必须出现在两个地方。所有其他限定符都保留在声明中。

两个地方都必须出现的三种限定符是const和两种引用限定符,出现在C++11标准中:

void foo() const;
void foo() &;
void foo() &&;

所有其他限定符保留在声明中。

关于c++ - 在外联定义成员函数时,哪些限定符必须出现在声明/定义/两者中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38741863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com