我需要const int
通过 C++ 中的初始化列表在类构造函数中初始化一个数组。
- 我知道有一个基于使用扩展初始化列表的简单解决方案。
- 不过,我想避免使用
-std=c++11
or-std=gnu++11
。 - 显然,我从一开始就知道它的大小是 4,内容是
{1, 2, 3, 4}
.
我需要const int
通过 C++ 中的初始化列表在类构造函数中初始化一个数组。
-std=c++11
or -std=gnu++11
。{1, 2, 3, 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 解决方案,那么您根本无法做到这一点。