C++ 结构体有默认构造函数吗?

2023-12-06

我写了以下代码片段:

void foo()
{
    struct _bar_ 
    {
        int a;
    } bar; 

    cout << "Value of a is " << bar.a;
}

并用 g++ 4.2.1 (Mac) 编译它。输出是“a 的值为 0”。

c++ 中结构体的数据成员总是默认初始化(与 c 相比),这是真的吗?或者观察到的结果只是巧合?

我可以想象 C++ 中的结构有一个默认构造函数(因为结构和类在 C++ 中几乎相同),这可以解释为什么 bar 的数据成员 a 初始化为零。


简单的答案是肯定的。
它有一个默认构造函数。

注意:结构和类是相同的(除了访问说明符的默认状态之外)。

但是否初始化成员将取决于实际对象的声明方式。在您的示例中,否,该成员未初始化并且a具有不确定的价值。

void func()
{
    _bar_  a;                 // Members are NOT initialized.
    _bar_  b = _bar_();       // Members are zero-initialized
    // From C++14
    _bar_  c{};               // New Brace initializer (Members are zero-initialized)


    _bar_* aP = new _bar_;    // Members are NOT initialized.
    _bar_* bP = new _bar_();  // Members are zero-initialized
    // From C++14
    _bar_  cP = new _bar_{};  // New Brace initializer (Members are zero-initialized)
}

// static storage duration objects
//   i.e. objects at the global scope.
_bar_ c; // Members are zero-initialized.

确切的细节在标准中进行了解释,网址为8.5 Initializers [dcl.init]第4-10段。但以下是针对这种情况的简单总结。

没有用户定义构造函数的结构具有编译器生成的构造函数。但它的作用取决于它的使用方式,它要么默认初始化其成员(对于 POD 类型通常什么都没有),要么对其成员进行零初始化(对于 POD 通常意味着将其成员设置为零)。

附言。不要使用_作为类型名称中的第一个字符。你会遇到问题。

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

C++ 结构体有默认构造函数吗? 的相关文章

  • 在c++中定义一堆静态方法

    哪个是合适的 class xyz static int xyzOp1 static int xyzOp2 OR namespace xyz static int xyzOp1 static int xyzOp2 当我们使用类标签与命名空间标
  • asp:repeater 折叠表行 - 已更新

    我想知道是否有人对我的问题有创造性的解决方案 我有一个从我的数据库填充的转发器 如下所示
  • StackExchange Redis 删除所有以以下开头的键

    我有一个格式的密钥 Error 1 Error 24 Error 32 Using StackExchange Redis 我该怎么办KeyDelete在与格式匹配的所有键上Error 在另一个答案中我看到了 LUA 脚本 EVAL ret
  • 没有配置身份验证处理程序来处理该方案

    这是一个非常烦人的问题 我在我的 asp net core 项目上设置 cookie 身份验证 有时会出现此错误 有时不会 没有图案 它只是开始抛出错误 然后突然停止 然后再次开始 例外情况是 InvalidOperationExcepti
  • 图片框、双击和单击事件

    我有一个奇怪的问题 我有一个图片框双击事件以及单击事件 问题是即使我双击该控件 也会引发单击事件 如果我禁用单击事件 则双击事件正在工作 这个问题已经在这里讨论过 https stackoverflow com questions 1830
  • MVC BaseController 处理 CRUD 操作

    我想重构我的基本 CRUD 操作 因为它们非常重复 但我不确定最好的方法 我的所有控制器都继承 BaseController 如下所示 public class BaseController
  • 如何在 Windows 上的 GCC 中链接 CS50 C 库

    我是 编程新手 一直在尝试使用以下命令编译我的代码MinGW https en wikipedia org wiki MinGW GCC 但我尝试包括CS50 https en wikipedia org wiki CS50 cs50 c
  • 如何在 C++11 中返回类成员向量

    我读了几篇关于如何从方法返回向量的文章 其中包括 c11 右值和移动语义混淆返回语句 https stackoverflow com questions 4986673 c11 rvalues and move semantics conf
  • 将两个垂直滚动条相互绑定

    我在控件中有两个 TextBox 并且它们都有两个 VerticalScrollBar 我想在它们之间绑定 VerticalScrollBars 如果一个向上 第二个也会向上等等 如果可以的话我该怎么做 Thanks 不是真正的绑定 但它有
  • 将 JavaScript 引擎嵌入到 .NET 中 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 只是想知道是否有人尝试过将任何 js 引擎嵌入并实际集成到 net 环境中 我可以找到并实际使用 经过L
  • 对象变空似乎是 Hangfire 中的反序列化问题

    Hangfire 似乎无法反序列化我的原始版本Scheduler对象及其所有状态 我正在调用其 Execute 方法BackgroundJob Enqueue 如下所示 Scheduler new FileInFileOut FileIn
  • 向客户端发送状态码 500 时页面未呈现

    我有一个页面 通用处理程序 我想在该页面上向客户端返回状态代码 500 以指示出现问题 我这样做 Response StatusCode 500 Response StatusDescription Internal Server Erro
  • 批量插入,asp.net

    我需要获取与会员相对应的 ID 号列表 在任何给定时间处理的数量可能在 10 到 10 000 之间 我可以毫无问题地收集数据 解析数据并将其加载到 DataTable 或任何内容 C 中 但我想在数据库中执行一些操作 将所有这些数据插入表
  • 从 SQL 语句中检索元数据(表名)

    我使用的是 Visual Studio 2008 我创建了一个 Winforms 应用程序 并且尝试从 SQL 语句中提取表名 con new SqlConnection connString String queryString Sele
  • 为什么使用 .AsEnumerable() 而不是转换为 IEnumerable

    扩展方法之一IEnumerable
  • 如何检查日期时间是否发生在今天?

    有没有比下面的代码更好的 net 方法来检查 今天 是否发生了 DateTime if newsStory WhenAdded Day DateTime Now Day newsStory WhenAdded Month DateTime
  • C 中的 2 个字符要短

    我有2个字符 Char 128和查尔2 如何将这些字符转为 Short640 in C 我试过了 unsigned short getShort unsigned char array int offset short returnVal
  • 对 Action 方法的两个并行 ajax 请求排队,为什么?

    我正在使用 ASP NET MVC 开发一个视频网站 我希望在我的应用程序中拥有的一项功能是转码视频 但由于转码过程可能非常耗时 我想向客户端用户展示该过程的进度 因此 我的架构是使用一个控制器操作来处理整个转码过程 并将其进度写入存储在服
  • 为什么在一行中使用这个 C++ 函数两次会导致编译错误?

    我在尝试在 Visual C 2010 中实现智能相等测试宏类型模板函数时遇到了一些麻烦 该函数与VS 中关于模板函数默认参数的错误 https stackoverflow com questions 10343177 why do i g
  • 获取线段上最接近另一个点的点[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我想找到线段AB上最接近另一个点P的点 我的想法是 Get a1 and b1由直线公式y1 a1x b1 使用 A 点

随机推荐

  • 重定向动作中的Struts2动态参数名称

    我成功地对我的 struts2 映射文件之一使用重定向操作 如下所示
  • android 调整ViewBounds 错误?

    当我在 imageView xml 中使用 android adjustViewBounds true 时 它不起作用 如果我把 setAdjustViewBounds true 在我的 ImageView 的构造函数中 它工作正常 有什么
  • 从任何角度来看 ++i 和 i+=1 有什么区别

    这是 kn king 的 c 编程 现代方法 中的一个问题 我无法理解他给出的解决方案 The expression i is equivalent to i 1 The value of both expressions is i aft
  • Django 中查询集中与多行记录相关的字段的串联

    我必须建立一对多关系的模型 我试图用它来区分记录的类型 假设第一个模型专用于书籍信息 第二个模型是某些类型 例如 A B C 并且类型表与书籍之间存在间接关系 因此每本书可以是 A B 或 C 或任何可能的组合类型 我想使用串联 或注释中的
  • 有没有办法将 twilio 中的 mulaw 音频流保存在文件中

    我正在使用 Twilio 语音流功能 但我不想使用 Twilio 录音功能 当 Twilio 开始向我的服务器发送语音流时 我想将其作为音频文件实时存储到磁盘中 我今天遇到了同样的问题 并找到了一种为 mu law 标头生成 WAVE 标头
  • 读取行时,awk $line 带有多个分隔符

    我正在尝试一个小的变化this 除了我告诉 awk 要根据第 5 个字段分割的文件的分隔符可以是冒号 或制表符 t 我做的是awk F t 单独来看 它确实打印了正确的 5 字段 但是 当我尝试将其合并到更大的命令中时 它返回以下错误 pr
  • Bash shell 十进制到二进制以 2 为基数的转换

    我正在 Bash 中寻找一种将十进制数转换为二进制数的简单方法 我有需要转换的变量 ip1 ip2 ip3 ip4 有没有一种简单的方法可以做到这一点 而无需查看每个单独的数字 我宁愿不必编写大量代码 您可以使用bc as echo oba
  • 连接来自位于不同服务器上的多个 SQL Server 数据库的表

    连接位于不同服务器上的数据库上的 SQL Server 数据库表的推荐方法是什么 所有数据库都将位于同一网络上 链接服务器可以工作 但有一些问题让我试图避免它们 随着时间的推移 它们会让从高层管理您的环境变成一场噩梦 服务器来来去去 升级等
  • 如何测试列表是否按升序排序

    这是练习的问题 编写一个函数来检查列表是否按升序排序 def ascending lst for k in range 0 len lst if lst k lt lst k 1 print Ok else print NOk the nu
  • Flask SocketIO 不会向特定房间发送数据

    我正在创建一个程序 该程序从 Flask 应用程序获取数据 并且可以将数据发送到 Flask 应用程序 并且我正在使用 Socket IO 来执行此操作 socketio emit receive data data 当发送到此时 这最终会
  • 表情符号替换 - PHP

    我需要将文本表情符号替换为 html 图像标签 我整理了以下数据 private smile array gt o 3 c gt 8 private laugh array gt D D D 8 D x D X D D D 3 8 priv
  • AutoMapper - 类型的条件映射

    我想做类似以下的事情 我想知道是否有人知道该怎么做 Mapper CreateMap
  • 在phonegap中将base64字符串转换为pdf

    在我的应用程序中 我收到了代表 PDF 的 Base64 字符串 我希望用户能够将 base64 作为 pdf 保存到他的手机上 我一直在寻找科尔多瓦文件传输插件 但需要一个可以下载文件的 服务器 路径 而不是转换 base64 字符串 有
  • swagger.json 路径和定义为空。规范中没有定义操作

    我正在开发一个 net core Web 应用程序 我正在使用 swagger 并且我已经做了所有必要的调整 不幸的是它不起作用 我只是看到No operations defined in spec 在 swagger 输出页面中 swag
  • 如何使手势识别器在动画 UIImage 视图中工作

    我在图像视图中有 5 个动画图像 并且希望允许用户根据默认 ID 点击它们并将其推送到另一个视图 我尝试添加手势点击 但图像视图未检测到 有人可以给我一些建议吗 编辑 最终我没有使用它 而是设置了一个 UIButton 谢谢 viewDid
  • Excel 2013 VBA 清除所有筛选器宏

    看来旧的宏不起作用 我有适当的安全设置来运行 VBA 宏 但是当我尝试了几种清除工作表上所有过滤器的方法时 我收到编译错误 这是我尝试过的 Sub AutoFilter Remove This macro removes any filte
  • React Native 导航:重置堆栈导航器

    我正在使用 React Navigation 5 在顶部有一个抽屉导航器 带有以下屏幕
  • 使用 Python 操作其他程序的 GUI?

    我这里有一个程序 有一个输入框和一个按钮 我希望 python 在输入框中输入一个字符串 然后按下按钮 解决这个问题的最佳方法是什么 顺便说一句 这是针对 Windows 7 的 pyWinAuto 可以很好地解决这个问题 使用它 您可以根
  • 从 x86 应用程序获取 x64 进程主模块位置?

    我正在尝试获取操作系统上正在运行的进程的所有文件路径Process GetProcesses 方法 它在 x64 NET 应用程序下工作得很好 但是如果我尝试从 x86 NET 应用程序迭代进程列表 情况就会发生变化 因为Process M
  • C++ 结构体有默认构造函数吗?

    我写了以下代码片段 void foo struct bar int a bar cout lt lt Value of a is lt lt bar a 并用 g 4 2 1 Mac 编译它 输出是 a 的值为 0 c 中结构体的数据成员总