相关疑难解决方法(0)

什么是聚合和POD以及它们如何/为何特殊?

常见问题解答涉及聚合和POD,并涵盖以下材料:

  • 什么是聚合
  • 什么是POD(普通旧数据)?
  • 它们有什么关系?
  • 它们如何以及为何特别?
  • C++ 11有什么变化?

c++ aggregate standard-layout c++11 c++17

525
推荐指数
6
解决办法
13万
查看次数

C++零初始化 - 为什么这个程序中的`b`未初始化,但是`a`被初始化了?

根据Stack Overflow问题的接受(且唯一)答案,

使用定义构造函数

MyTest() = default;
Run Code Online (Sandbox Code Playgroud)

而是将零初始化对象.

那为什么以下,

#include <iostream>

struct foo {
    foo() = default;
    int a;
};

struct bar {
    bar();
    int b;
};

bar::bar() = default;

int main() {
    foo a{};
    bar b{};
    std::cout << a.a << ' ' << b.b;
}
Run Code Online (Sandbox Code Playgroud)

产生这个输出:

0 32766
Run Code Online (Sandbox Code Playgroud)

两个构造函数都是默认的?对?对于POD类型,默认初始化为零初始化.

根据这个问题的接受答案,

  1. 如果POD成员未在构造函数中初始化,也未通过C++ 11类内初始化,则默认初始化.

  2. 无论堆栈还是堆,答案都是一样的.

  3. 在C++ 98中(而不是之后),新的int()被指定为执行零初始化.

尽管试图将我的(虽然很小)头部包裹在默认构造函数默认初始化之间,但我无法提出解释.

c++ initialization language-lawyer

129
推荐指数
3
解决办法
7552
查看次数