在C++中初始化常量数组

Initialization of const array in C++

本文关键字:常量 数组 初始化 C++      更新时间:2023-10-16

我需要通过C++中的初始化列表在类构造函数中初始化const int数组。

  • 我知道这个问题有一个简单的解决方案,基于使用扩展初始化列表
  • 尽管如此,我还是希望避免使用-std=c++11-std=gnu++11
  • 显然,我从一开始就知道它的大小是4内容为CCD_ 4

在不参与C++11初始化器列表领域的情况下,我能想到的唯一方法是将其隐藏在结构包装器中,并在构造初始化器列表中对其进行值初始化:

#include <iostream>
using namespace std;
struct ArrayWrap
{
    int content[4];
    int& operator [](size_t n) { return content[n]; }
    int operator [](size_t n) const { return content[n]; }
};
static const ArrayWrap content = { {1,2,3,4} };

struct MyObj
{
    const ArrayWrap arrwrap;
    MyObj() : arrwrap(content) {}
};
int main(int argc, char *argv[])
{
    MyObj obj;
    for (int i=0;i<4;++i)
        cout << obj.arrwrap[i] << ' ';
    cout << endl;
    return EXIT_SUCCESS;
}

输出

1 2 3 4

在C中,当按值从函数返回固定数组时,通常会将它们埋在结构中,在这种情况下,我只是利用C++编译器生成的包装结构的默认副本ctor。

可能不是您想要的理想解决方案,但它确实有效,并在C++98下编译。

好吧,如果你从候选集中禁止C++11解决方案,那么你就不能这样做。