在C++中初始化常量数组
Initialization of const array in C++
我需要通过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解决方案,那么你就不能这样做。
相关文章:
- C++常量数组的编译时间较长
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- 使用双指针传递 2D 常量数组
- 检查输入 std::array 指针数据是否等于某个常量数组
- 如何在可执行文件中存储常量数组?
- 常量数组如何在每个元素中只能包含字符,而 char* 数组能够指向每个元素中的字符串?
- LLVM 无法将数组类型强制转换为常量数组
- 如何在C++中的单行中返回常量数组中的值
- C++ 具有常量数组和initializer_list的重载构造函数
- 在可变参数构造函数中初始化常量数组
- 非常量数组
- C/C++ 中的常量数组和静态常量数组有什么区别
- C++全局常量数组:是否保证合并(优化)到一个副本中
- 在常量数组上使用指针遍历
- 具有函数指针常量数组的 C++ 模板化静态类
- 字符常量数组为空,即使已为其赋值 [C++]
- 指向常量数组的指针
- 函数指针的常量数组令人困惑
- 在 c++ 中初始化静态常量数组
- 常量数组类成员初始化