首页  >  文章  >  后端开发  >  如何在嵌入式环境中初始化 C 对象数组?

如何在嵌入式环境中初始化 C 对象数组?

Barbara Streisand
Barbara Streisand原创
2024-11-06 17:21:03989浏览

How to Initialize C   Arrays of Objects in an Embedded Environment?

C 数组的构造函数初始化

在 C 中初始化对象数组可能具有挑战性,因为缺少与此类似的数组初始化语法适用于非数组对象。

考虑以下非数组示例:

struct Foo {
    Foo(int x) { /* ... */ }
};

struct Bar {
    Foo foo;

    Bar() : foo(4) {}
};

在此示例中,Bar 构造函数使用初始化语法初始化 foo 成员对象: foo(4 ).

但是,对于数组来说,情况就不同了。以下语法不正确:

struct Foo {
    Foo(int x) { /* ... */ }
};

struct Baz {
    Foo foo[3];

    // ??? I know the following syntax is wrong, but what's correct?
    Baz() : foo[0](4), foo[1](5), foo[2](6) {}
};

解决方案

不幸的是,在 C 98 的上下文中(这似乎是嵌入式处理器建议的情况)限制),无法使用构造函数初始值设定项实现数组成员初始化。解决方法是为数组成员提供默认构造函数,并在构造函数内执行任何必要的初始化。

例如:

struct Foo {
    Foo() : value(0) { /* ... */ }  // Default constructor with a default value

    Foo(int x) { /* ... */ }
};

struct Baz {
    Foo foo[3];

    Baz() {
        foo[0] = Foo(4);
        foo[1] = Foo(5);
        foo[2] = Foo(6);
    }
};

虽然这种方法不如直接初始化那么优雅,但它允许创建和初始化对象数组,而无需求助于嵌入式环境中可能不可用的外部初始化方法或 STL 构造。

以上是如何在嵌入式环境中初始化 C 对象数组?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn