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

2023-12-05

我几乎可以肯定这个问题以前已经被问过。不幸的是,我的 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(使用前将#替换为@)

当外部定义成员函数时,哪些限定符必须出现在声明/定义/两者中? 的相关文章

  • 我应该把 try/catch 和“using”语句放在哪里? [复制]

    这个问题在这里已经有答案了 可能的重复 try catch using 正确的语法 https stackoverflow com questions 4590490 try catch using right syntax 我想try c
  • 无法将 std::min 传递给函数,std::min 的副本有效

    Passing std min函数无法编译 我复制了 libcpp 声明std min进入我的源文件并且它可以工作 std 版本有什么问题 clang 和 gcc 也会发生同样的情况 在 Godbolt 上测试 https godbolt
  • c# 从另一个类中的另一个静态事件引发事件

    需要帮助从另一个班级调用事件 我有已声明事件的课程 public class MxPBaseGridView GridView public event AddNewItemsToPopUpMenuEventHandler AddNewIt
  • 我如何知道 C 程序的可执行文件是在前台还是后台运行?

    在我的 C 程序中 我想知道我的可执行文件是否像这样在前台运行 a out 或者像这样 a out 如果你是前台工作 getpgrp tcgetpgrp STDOUT FILENO or STDIN FILENO or STDERR FIL
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • 将设置函数(setter)标记为 constexpr 的目的是什么? [复制]

    这个问题在这里已经有答案了 我无法理解将 setter 函数标记为的目的constexpr 自 C 14 起这是允许的 我的误解来自以下情况 我使用 constexpr c tor 声明一个类 并且我将通过创建该类的 constexpr 实
  • C 中“complex”的默认类型

    根据我读过的文档 C99 和更高版本的支持float complex double complex and long double complex作为复杂类型 但是 此代码在使用时编译时不会发出警告gcc Wall Wextra inclu
  • 全局使用和 .NET Standard 2.0

    我最近意识到我可以使用 C 10 功能文件范围的命名空间在 NET Standard 2 0 项目中也可以通过设置
  • C# 编译器数字文字

    有谁知道 C 编译器数字文字修饰符的完整列表 默认情况下 声明 0 使其成为 Int32 声明 0 0 使其成为 Double 我可以在末尾使用文字修饰符 f 来确保某些内容被视为 Single 例如像这样 var x 0 x is Int
  • 在 C# 中何时使用 ArrayList 而不是 array[]?

    我经常使用一个ArrayList而不是 正常 array 当我使用时 我感觉好像我在作弊 或懒惰 ArrayList 什么时候可以使用ArrayList在数组上 数组是强类型的 并且可以很好地用作参数 如果您知道集合的长度并且它是固定的 则
  • 用于连接 DataTable 上的动态列的动态 LINQ

    我目前遇到的情况不确定如何继续 我有两个从数据库填充的数据表 我还有一个可用的列名称列表 可用于将这两个数据表连接在一起 我希望编写一组 LINQ 查询 这些查询将 显示两个数据表中的行 内部联接 用于从一个数据表更新另一个数据表 显示一个
  • 如何在 C# 中获取 Json 数组?

    我有一个像这样的 Json 字符串 我想将它加载到 C 数组中 当我尝试这样做时 我收到异常 我的字符串 customerInformation customerId 123 CustomerName Age 39 Gender Male
  • 将错误代码映射到 C++ 中的字符串

    将错误代码从枚举映射到字符串的更有效方法是什么 在 C 中 例如 现在我正在做这样的事情 std string ErrorCodeToString enum errorCode switch errorCode case ERROR ONE
  • 如何使用 CSI.exe 脚本参数

    当你运行csi exe 安装了 Visual Studio 2015 update 2 您将得到以下语法 Microsoft R Visual C Interactive Compiler version 1 2 0 51106 Copyr
  • 使用多线程进行矩阵乘法?

    我应该使用线程将两个矩阵相乘 有两件事 当我运行程序时 我不断得到 0 我还收到消息错误 对于每个错误 它在粗体行上显示 警告 从不兼容的指针类型传递 printMatrix 的参数1 我尝试打印输出 还要注意 第一个粗体块 这是我解决问题
  • C# 中的 C/C++ 代码编译器

    在 C 中 我可以使用下面的代码编译 VB 和 C 代码 但无法编译 C C 代码 有什么办法可以做到这一点吗 C 编译器 public void Compile string ToCompile string Result null st
  • 在哪里可以下载没有 Visual Studio 2010 的 C# 4.0 编译器?

    我知道 CTP VS 2010 映像 但我可以只下载 NET Framework 4 0 和 C 编译器吗 AFAIK VS 2010 CTP 仅作为 VM 映像提供 我不相信 Microsoft 发布了 VS 的安装程序 其中一个绝对不适
  • printf或iostream如何指定点后的最大位数

    字符串采用什么格式printf or iomanip我应该使用 iostream 中的运算符以以下格式打印浮点数 125 0 gt 125 125 1 gt 125 1 125 12312 gt 125 12 1 12345 gt 1 12
  • 如何提高环复杂度?

    对于具有大量决策语句 包括 if while for 语句 的方法 循环复杂度会很高 那么我们该如何改进呢 我正在处理一个大项目 我应该减少 CC gt 10 的方法的 CC 并且有很多方法都存在这个问题 下面我将列出一些例如我遇到的问题的
  • 为什么表达式 a = a + b - ( b = a ) 在 C++ 中给出序列点警告?

    以下是测试代码 int main int a 3 int b 4 a a b b a cout lt lt a lt lt a lt lt lt lt b lt lt b lt lt n return 0 编译此命令会出现以下警告 gt g

随机推荐

  • Java机器人类mouseMove不去指定的位置

    老实说 我不完全确定出了什么问题 这是 if 和 if else 下的大量其他基本机器人命令动作的简短版本 每当我运行该程序时 鼠标应移动到指定位置并单击 但是 当我运行程序时 它不会移动到我指示的位置 而是每次运行时它都会移动到不同的位置
  • 将大型 Git 存储库拆分为许多较小的存储库

    成功将 SVN 存储库转换为 Git 后 我 现在拥有一个非常大的 Git 存储库 我想将其分解为多个较小的存储库并维护历史记录 那么 有人可以帮助分解可能如下所示的存储库 MyHugeRepo git DIR A DIR B DIR 1
  • 如何在wpf中实现主题化

    我想在 WPF 中实现 ASP Net 类型主题 用户可以选择各种预定义主题 并且可以切换到另一个主题 为了实现这一点 我尝试为每个主题创建不同的资源字典 并使用键存储所需的样式 所有主题中的键集合都是相同的 但每个主题的定义都不同 我使用
  • 将矩阵中每个等于 0 的元素替换为上一行的相应元素

    我正在使用 R 我有一个矩阵 我想用上面行的相应元素替换它等于零的每个元素 例如 我创建了以下矩阵 AA lt matrix c 1 2 3 1 4 5 1 0 2 ncol 3 nrow 3 1 2 3 1 1 1 1 2 2 4 0 3
  • 如何在两个 Android 应用之间共享应用内购买

    我有两个 Android 应用程序 app1 和 app2 它们都是免费的 但 app2 包含应用程序内购买升级 现在我要将这两个应用程序合并到 app1 没有应用内购买的应用程序 中 我的问题是 如何保留已在 app2 中消费的购买 以便
  • 使用 set_xlim() 切片图后 matplotlib autoscale(axis='y')

    作为演示 我绘制了 x 0 到 x 9 其中 x 值的范围为 10 到 20 然后我对这些图像进行切片 得到 9 个切片 x 10 到 11 11 到 12 等等到 18 到 19 我希望裁剪图像 以便 y 值始终在每个切片中从上到下分布
  • CSS3 可以添加文本渐变吗?

    我正在寻找在文本中添加渐变 网络图们有一个快速提示关于那个 但它仅适用于 webkit 浏览器 由于这是相当老的帖子 我正在检查是否有任何跨浏览器解决方案 忽略 ie 我知道如何使用背景渐变图像 我知道在 Firefox 中实现此功能的唯一
  • 子属性的 JSON .NET 自定义名称解析器

    我有一个 API 它从 MongoDB 返回一个 JSON 对象 其中属性之一是 开放式 文档 这意味着它可以是any该属性的有效 JSON 我事先不知道属性的名称是什么 它们可以是任何字符串 我只知道这个特定的属性需要序列化exactly
  • 从通知中删除声音

    我正在尝试创建一个 UISwitch 以便用户可以选择不从应用程序内部获取推送声音 是否可以 我尝试再次注册但没有声音 void registerToNotificationWithoutSound if UIDevice currentD
  • React-big-calendar 导入 CSS 失败

    我的反应大日历工作正常 但 css 导入失败 文档说 样式可以在 react big calendar lib css react big calendar css 中找到 并且应该包含在带有日历组件的页面上 我在其他示例中看到它是通过 B
  • 在 Visual Studio 中更改 ctrl k+c 以生成 c 样式注释 (/**/) 而不是 c++ 样式注释 (//)

    如何更改 Visual Studio 中使用的注释样式 to 我使用注释快捷方式主要是为了临时注释掉代码 令我烦恼的是 如果我选择bool abc在下面的代码中并按 ctrl k c void func bool abc 它产生 void
  • 尝试引用工作表中的复选框时出现“需要对象”错误

    我正在尝试在 Excel VBA 中编写代码 我想在选中复选框时更改用户选择的单元格的颜色 我已经编写了这段代码 但它在标记的行上给出了 需要对象 错误 Sub CheckBox1 Click Dim xRng As Range Set x
  • 如何按顺序排序兄弟姐妹?

    我正在使用 PostgreSQL 9 1 6 并尝试构建递归 SQL 我想排序ORDER SIBLINGS BY在 SQL Server 中就是这样做的 Editor s note This is probably supposed to
  • 打字稿中的数组类型

    为什么 TypeScript 允许这样做 我指定了一个数字索引 为什么可以使用字符串作为索引 Visual Studio 不报告错误 interface StringArray index number string var a Strin
  • 支持 argparse 中子命令之前或之后的全局参数

    设置parents与解析器的参数将允许在解析器之间共享公共参数 e g 父命令和子命令 但是 当使用已指定 value 属性的参数时 将基本解析器应用于父命令和子命令似乎会用子命令解析器的值覆盖父解析器的值 dest关键字 无论调用是否在子
  • 具有用于模拟器 + Appstore 批准的 x86 Slice 的 iOS 框架

    我正在构建和分发一个 iOS 框架库以供其他开发人员使用 最近我遇到了一个Apple Store 的错误 功能 如果 iOS 框架是使用 x86 架构 对于模拟器 构建的 那么整个应用程序将无法通过 App Store 批准 并出现以下错误
  • React Native 调试菜单未打开 - Android CMD + M

    React 本机调试菜单在 Android 中不起作用 命令 RR 确实有效 CMD M 不起作用 它之前正在工作 AVD 管理器中启用键盘输入 有一个晦涩的设置只有在打开模拟器后才可用 Toggle Send keyboard short
  • Android BLE 无法从设备接收 Gatt 特性通知

    当我在特征上写入值时 我尝试从设备接收通知 但我没有收到任何信息 我启用该特征的通知 然后写入该值 我发现设备中的特性已更改其值 但我无法收到通知 这是我的代码 设备活动 public class DevicesActivity exten
  • 选择列表中的下拉子菜单

    我创建了一个包含省份名称的下拉菜单 每个省份下方都提到了其城市 我希望这些城市在单击时出现在省份左侧的子菜单中
  • 当外部定义成员函数时,哪些限定符必须出现在声明/定义/两者中?

    我几乎可以肯定这个问题以前已经被问过 不幸的是 我的 C 已经变得如此生疏 我什至不知道要搜索什么 是否有一个易于记住的经验法则可以告诉我哪些限定符 inline virtual override const mutable等 必须出现 a