编译器“何时”隐式声明默认构造函数?

2024-04-26

我知道如果我们不声明它,编译器将生成一个默认构造函数。

“何时”是我感到困惑的一点。

A:

class Base {};
int main()
{
    return 0;   
}

B:

class Base {};
int main()
{
    Base b;   // Declare a Base object.
    return 0;
}

A 和 B 的区别仅在于 B 声明了一个真正的 Base 对象。 在我看来,只有当我们声明一个真实的对象并且编译器找不到构造函数时,它才会生成默认构造函数。

我的问题是:

  1. 代码片段A会生成Base的默认构造函数吗?

  2. 有什么工具可以帮助检查结果吗?我使用 Visual Studio 2010,/d1 reportAllClassLayout 似乎没用。


引用 C++11。

[class.ctor]§5:

类的默认构造函数X是类的构造函数X无需参数即可调用。如果类没有用户声明的构造函数X,没有参数的构造函数被隐式声明为默认值(8.4)。

[class.ctor]§6:

默认且未定义为已删除的默认构造函数是隐式定义的当它被 odr 使用(3.2)来创建其类类型(1.8)的对象时,或者当它在第一次声明后被显式默认时。

这意味着它是在你的类被定义和定义时声明的(如inline) 当它第一次在给定的翻译单元中使用时。

在你的情况下,这意味着代码片段A将包含默认构造函数的声明(但不是定义),而片段B将包含两者。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编译器“何时”隐式声明默认构造函数? 的相关文章

  • 是否有与 SQL Server newsequentialid() 等效的 .NET

    我们使用 GUID 作为主键 您知道默认情况下它是集群的 将新行插入表中时 它将插入表中的随机页 因为 GUID 是随机的 这会对性能产生可衡量的影响 因为数据库始终会分割数据页 碎片 但我使用顺序 GUID 的主要原因是因为我希望将新行插
  • lambda 始终返回“1”

    有这样的代码 include
  • C++ 中的可变参数函数声明中省略了逗号

    我习惯于这样声明可变参数函数 int f int n 读书时C 编程语言我发现书中的声明省略了逗号 int f int n the comma has been omitted 这个语法似乎是 C 特定的 因为当我尝试使用 C 编译器编译它
  • 我可以在 WinRT / Windows 8 Store 应用程序中绑定 DynamicObject

    我有以下代码 public class MyClass DynamicObject INotifyPropertyChanged Dictionary
  • CRTP 能否完全取代小型设计的虚拟功能?

    Is CRTP http en wikipedia org wiki Curiously recurring template pattern有足够的能力智胜virtual功能齐全 我认为 CRTP 的唯一缺点是为每个重复模式生成大量代码
  • 将文件扩展名与应用程序关联

    我编写了一个编辑特定文件类型的程序 我想为用户提供在启动时将我的应用程序设置为该文件类型的默认编辑器的选项 因为我不需要安装程序 我尝试编写一个可重用的方法 通过向 HKEY CLASSES ROOT 添加一个键来为我关联一个文件 最好在任
  • 相当于一个允许重复键的排序字典

    我需要一个数据结构 可以通过与对象关联的浮动键对对象进行排序 从低到低的在前 问题是键代表成本 所以经常有重复 我不关心这一点 因为如果两个具有相同的成本 我只会抓住第一个 因为它没有区别 问题是编译器抱怨 是否有一种数据结构的行为方式相同
  • g++.exe 和 x86_64-w64-mingw32-g++.exe 有什么区别?

    同样的问题也适用于 gcc ar 等 在 Code Blocks 中将工具链可执行文件从 Something exe 更改为 x86 64 w64 mingw32 something exe 时 代码仍然可以完美编译 此外 32 位和 64
  • 一个阻塞但非模态的 QDialog?

    我有一堆图像 我想对其执行一些操作 处理完每个图像后 我的程序应该弹出一个对话框 提示用户是否要继续处理下一个图像或中止 在此之前 他们应该有机会对图像或参数进行一些手动更改 无论如何 他们必须能够访问应用程序的窗口 而调用对话框的方法的执
  • 类模板的可变参数构造函数模板的特化

    这是一个带有可变参数构造函数的类 它专门用于从临时对象进行复制和移动 template
  • 我应该在查询时调用 ToListAsync()

    不久前 我开始接触 C 并正在寻找一些如何编写代码的最佳实践 现在 我正在使用 EF Core 并具有以下代码 var details dbContext Details Where x gt x Name Button foreach v
  • 自定义文件属性

    我需要遵循 在我的申请中 我有文件 需要随时签入和签出的文件 当我从应用程序中签出文档时 我需要将自定义属性添加到文件中 以便稍后在签入文档时可以识别它 我尝试使用以下代码使用 DSOFile 中的 OleDocumentPropertie
  • 在javascript中调用c#函数[重复]

    这个问题在这里已经有答案了 可能的重复 从 Javascript 调用 ASP NET 函数 https stackoverflow com questions 3713 call asp net function from javascr
  • 使用 PrimarySearcher.FindAll() 时出现内存泄漏

    我也有一个使用插件和应用程序域长时间运行的服务 并且由于使用目录服务而出现内存泄漏 请注意 我正在使用 system directoryservices accountmanagement 但据我了解 它使用相同的底层 ADSI API 因
  • 列表框显示类名称而不是值

    我正在开发一个项目 其中用户应该向动物输入值 名称 年龄 性别等 并且用户输入的值应该显示在列表框中 这些类相互继承 以下是继承的工作原理 Animalclass 是所有类的父类 Mammal类继承自Animal class Dog类继承自
  • 创建 .ICS 文件,添加到 Outlook

    我正在创建一个简单的应用程序 允许用户下载 ICS 文件 并将其导入到他们选择的日历应用程序 站点中 我对创建过程感到满意 但对在 Outlook 中打开它们有疑问 将使用C ASP NET进行开发 当我打开一个日历时 它会添加一个新日历
  • C# - 使用 Linq 获取 Attribute 的属性

    我有一个属性 它本身就有属性 我想访问这些属性之一 布尔值 并检查它是否正确 我能够检查属性是否已设置 但这就是全部 至少对于 linq 来说是这样 属性 public class ImportParameter System Attrib
  • C/C++ 特殊 CPU 功能的使用

    我很好奇 新的编译器是否使用了新 CPU 中内置的一些额外功能 例如 MMX SSE 3DNow 所以 我的意思是 在最初的 8086 中甚至没有 FPU 所以旧的编译器甚至不能使用它 但新的编译器可以 因为 FPU 是每个新 CPU 的一
  • SoapHttpClientProtocol:以流而不是字符串的形式获取响应?

    我正在使用一种网络服务 它可以一次性输出大量数据 响应字符串可能约为 8MB 虽然在台式电脑上这不是问题 但嵌入式设备在处理 8MB 字符串对象时会发疯 我想知道是否有办法以流的形式获取响应 目前我正在使用如下方法 我尝试使用 POST 请
  • 使用 STL 迭代器而不初始化它

    我想做这样的事情 container iterator it NULL switch eSomeEnum case Container1 it vecContainer1 begin break case Container2 it vec

随机推荐

  • iOS - 更改屏幕色温[重复]

    这个问题在这里已经有答案了 我想构建一个像 f lux 这样的 iOs 应用程序 它根据白天更改设备的屏幕亮度 我知道我必须越狱我的设备 但我不知道如何实现这个应用程序 请建议我任何有用的 API 来做到这一点 提前致谢 iOS 已经内置了
  • 如何使用 j2me 将图像保存到照片库

    我正在使用 j2me 为诺基亚 三星 LG 等制作应用程序 我想将图像保存到手机的照片库中 但我不知道我用什么路径来保存图像 看这篇文章 FileConnection API 入门 http developers sun com mobil
  • Node npm windows 文件路径太长,无法安装包

    情况 我想在Windows托管的开发环境中使用gulp和相关的前端工具链 我在尝试使用 Browser Sync 之类的 gulp 插件时遇到了困难 因为 node modules 文件夹图呈扇形分布 使得 Windows 文件路径太长而无
  • 字典键有字符限制吗?

    在 NET 中我可以使用任何字符串作为字典键吗 这是模板引擎的一部分 我计划允许用户添加他们的自定义标头和值 标题将类似于 X 的值 或 分析和 XYZ 报告摘要 我担心他们是否会在罕见字符或类似内容中遇到异常 我假设存在大小限制 但希望它
  • 删除嵌套文档数组中的嵌入文档

    我的架构如下所示 content id ObjectId 4fc63de85b20fb72290000f8 assets path temp 4f840af9565832fa14000002 4f840b1e565832fa14000007
  • 构建前将jar添加到maven本地存储库

    我有第三部分 jar 文件 该文件远程不存在于项目目录中的文件 我想在执行 mvn install 时将此 jar 添加到本地存储库中 这是我当前执行此操作的代码
  • 在存在模板的情况下继承类型声明

    有没有办法在基类模板中声明类型并在子类模板中重用这些定义 例如 考虑以下尝试 template
  • 无法拦截来自 Nike.com 登录请求的流量

    我正在使用 BurpSuite 拦截登录时发送的 HTTP HTTPS 请求https www nike com https www nike com 我试图通过以下步骤来实现这一目标 打开 BurpSuite 和 Firefox 开启代理
  • 如何在共享驱动器上执行 xpdf (pdftotext.exe)?

    我正在尝试解析pdf to text via PHP and XPDF pdftotext exe 在我的本地主机上 一切运行良好 但是当我尝试将所有内容移动到服务器上时 我遇到了麻烦 首先我检查了服务器上的一些设置 安全模式是off ex
  • 绑定到 DataContext 的 WPF 样式 DataTrigger 不起作用

    我有一个 TextBox 其样式具有可更改文本的 DataTrigger 如下所示
  • 朱莉娅中未显示情节

    我有一个名为 mycode jl 的文件 其中包含以下代码here https juliastats org MultivariateStats jl dev pca using MultivariateStats RDatasets Pl
  • 图片上传亚马逊s3 android SDK 2.0

    我想将图像上传到 android 中的亚马逊 s3 存储桶 我没有收到任何错误 但它不起作用有人可以帮助我吗 我找不到任何关于此的好的例子或问题 我将图像分配给 文件图像3 images3 new File uri getPath publ
  • 带有@null背景的图像按钮(透明)[重复]

    这个问题在这里已经有答案了 我有一个图像按钮 其图像源具有透明度 但图像按钮的背景颜色是典型的灰色按钮颜色 我想设置背景 null 这工作正常 但是 当我按下此图像按钮时 我看不到指示我按下按钮的颜色 如果我按下按钮时删除背景 null 请
  • VSCode:找不到任务中的环境变量

    我试图在 VSCode 的tasks json 中定义我自己的环境变量 根据到目前为止我找到的每个链接 我尝试了以下操作 version 2 0 0 type shell options env APP NAME myApp problem
  • KineticJS - 如何在按钮单击时更改图像 src

    我试图通过单击按钮来更改kineticjs阶段中图像的src 我有一个可拖动的图像 在本例中为达斯维德 和顶部的静态图像 在本例中为猴子 单击按钮后 我希望能够用新图像替换可拖动图像 yoda JSFiddle 可以在这里看到 http j
  • spring框架中的命令对象是什么[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 你能解释一下吗Spring框架中的命令对象及其示例 来自 Spring 文档 Command Object 将使用表单中的数据填充的 Ja
  • 如何从 Intellij Maven 项目中永久删除模块?

    我目前正在 IntelliJIdea 12 1 6 Ultimate 中开发一个更大规模的基于 Maven 的项目 我使用 IntelliJIdea 已有大约 5 个月的时间了 包含的模块依赖于另一个模块 直到最近 依赖模块的源代码也是我项
  • Git 和 Dropbox - 本地存储库

    我阅读了大量有关 Dropbox 和 Git 功能结合的帖子并观看了许多视频 其中一个线程是这样的 有效地结合使用 Git 和 Dropbox https stackoverflow com questions 1960799 using
  • jQuery 中的“#”字符(数字符号)是什么意思?

    我是 Javascript 新手 我正在尝试理解一些代码 我不明白 也找不到任何有关的文档 sign function searchTerm autocomplete searchTerm 是什么意思 现在 可能意味着私有实例字段 http
  • 编译器“何时”隐式声明默认构造函数?

    我知道如果我们不声明它 编译器将生成一个默认构造函数 何时 是我感到困惑的一点 A class Base int main return 0 B class Base int main Base b Declare a Base objec