在C ++中初始化const数组

时间:2013-04-07 11:59:27

标签: c++ arrays constructor initialization

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

  • 我知道基于使用可以轻松解决此问题 扩展初始化列表。
  • 不过,我想避免使用-std=c++11-std=gnu++11
  • 显然,我从一开始就知道它的大小是4 而且 内容为{1, 2, 3, 4}

2 个答案:

答案 0 :(得分:1)

我可以设想在退出C ++ 11初始化列表领域时这样做的唯一方法是将它隐藏在struct wrapper中并在构造初始化列表中对其进行值初始化:

#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 ++编译器生成的包装器结构的默认copy-ctor。 p>

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

答案 1 :(得分:0)

好吧,如果您从候选集中禁止使用C ++ 11解决方案,那么you simply cannot do this

相关问题