首页 >后端开发 >C++ >在 C 11 之前和之后,如何在 C 类初始值设定项中初始化常量数组?

在 C 11 之前和之后,如何在 C 类初始值设定项中初始化常量数组?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-03 00:26:03609浏览

How do I initialize constant arrays in C   class initializers, both before and after C  11?

C 中类初始化器中常量数组的初始化

在 C 中,将数组声明为类的常量成员时,可能具有挑战性由于 const 限定符,在类构造函数中初始化它们。本文探讨了如何在 C 11 之前和之后的环境中克服这一挑战。

Pre-C 11:

在 C 11 之前,初始化 const使用传统语法无法直接实现类初始值设定项中的数组。但是,有一个解决方法:

<code class="cpp">class a {
    const int *b;
    int b_size;
    
    // Constructor
    a(const int *b_array, int b_sz)
        : b(b_array), b_size(b_sz) {}
};

int main() {
    int b_array[] {2, 3};
    a a(b_array, sizeof(b_array) / sizeof(int));
    // Proceed with using class 'a'
}</code>

在这种方法中,不是将数组声明为直接成员,而是将其声明为具有相应大小成员的指针。然后使用构造函数来分配和初始化指针。

Post-C 11:

随着 C 11 的引入,类初始化器中 const 数组的初始化变得更加简单:

<code class="cpp">struct a {
    const int b[2];
    
    // Constructor
    a() : b{2, 3} {}
};</code>

在此语法中,紧跟在类成员声明之后的花括号 {} 允许在构造函数中直接初始化 const 数组。

C 11 中的此更改简化了在类初始化器中初始化 const 数组的过程,并提供了一种更简洁、优雅的方式来定义此类。

以上是在 C 11 之前和之后,如何在 C 类初始值设定项中初始化常量数组?的详细内容。更多信息请关注PHP中文网其他相关文章!

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