当前位置: 首页 > 知识库问答 >
问题:

c++ - 为什么C语言中union成员初始化及构造函数使用报错?

澹台成龙
2024-03-03

为什么定义num时初始化或者用初始化函数Stu_t都会导致报错?
是不是意味着 union 内所有的成员以及嵌套的所有成员都不能在定义时初始化和使用构造函数呢?
如果不让初始化则会不会导致内存里是随机数据呢?

typedef struct Stu_t {    int num;   // 或者 int num = 0;    Stu_t () {        Num = 0;    }} Stu;typedef struct message_t {    union result_t {        int aaa;        Stu stu;    } result;} message;int main() {    message msg;    return 0;}

对 union 内成员逐层嵌套的成员进行定义时初始化和使用构造函数验证,发现都会报错。

共有2个答案

孙元明
2024-03-03

union 也是一种类。它也需要构造函数。

union 的构造函数通常都是自动生成的。但是有时这个构造函数无法自动生成,就必须要自己写一个。比如,当 union 的一个成员有一个自定义的构造函数,或者含有成员初始化的时候。这个时候,就必须自己显示的给 union 定义一个构造函数。

柴丰
2024-03-03

为联合类型 union message_t::result_t 添加默认构造函数:

typedef struct message_t{    union result_t    {        int aaa;        Stu stu;        result_t() {}    } result;} message;
 类似资料:
  • 主要内容:初始化 const 成员变量构造函数的一项重要功能是对成员变量进行初始化,为了达到这个目的,可以在构造函数的函数体中对成员变量一一赋值,还可以采用 初始化列表。 C++构造函数的初始化列表使得代码更加简洁,请看下面的例子: 运行结果: 小明的年龄是15,成绩是92.5 李华的年龄是16,成绩是96 如本例所示,定义构造函数时并没有在函数体中对成员变量一一赋值,其函数体为空(当然也可以有其他语句),而是在函数首部与函数体之间添

  • 如果我有一个struct Foo和一个struct Bar: 如果我初始化一个条并打印正确得到的值: 但是现在如果我声明这样的构造函数: 我失去了Bar::foo的默认构造,程序输出了32764 0 5! 为什么我不得不像这样无声地初始化每个成员变量: 只要我声明一个构造函数?在这种情况下,为什么默认构造不起作用?

  • 本文向大家介绍C++构造函数初始化顺序详解,包括了C++构造函数初始化顺序详解的使用技巧和注意事项,需要的朋友参考一下 1.构造函数、析构函数与拷贝构造函数介绍 构造函数 1.构造函数不能有返回值 2.缺省构造函数时,系统将自动调用该缺省构造函数初始化对象,缺省构造函数会将所有数据成员都初始化为零或空 3.创建一个对象时,系统自动调用构造函数 析构函数 1.析构函数没有参数,也没有返回值。不能重载

  • 为什么这段代码会打印出1234,编译运行,不应该报错么? 如题

  • 本文向大家介绍C ++静态成员变量及其初始化,包括了C ++静态成员变量及其初始化的使用技巧和注意事项,需要的朋友参考一下 静态C ++成员变量是使用static关键字定义的。类中的静态成员变量由所有类对象共享,因为在内存中只有它们的一个副本,而与该类的对象数量无关。 如果没有以任何其他方式初始化静态类成员变量,则在创建类的第一个对象时将其初始化为零。 给出了一个演示静态成员变量及其在C ++中的

  • 我有一个模板参数为T的类template Templ,Templ类有一个类型为T的数据成员,称为obj。我编写了一个可变构造函数模板,将参数转发给obj的构造函数: 现在我意识到类型T可能是一个具有init list构造函数的类,我希望它可以通过temp访问。所以我检查了什么是std::list::emplace和make\u shared。它们有一个像我一样的可变函数,但它们没有采用初始化列表的