0

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

  • 我知道有一个基于使用扩展初始化列表的简单解决方案。
  • 不过,我想避免使用-std=c++11or -std=gnu++11
  • 显然,我从一开始就知道它的大小是 4,内容是{1, 2, 3, 4}.
4

2 回答 2

1

在远离 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 下编译。

于 2013-04-07T12:25:12.600 回答
0

好吧,如果您从候选集中禁止 C++11 解决方案,那么您根本无法做到这一点

于 2013-04-07T12:14:57.977 回答