Const数组初始化,如果它太长
Const array initialization if its too long
在我对这个问题的回答中提到,如果变量被声明为const
,我发布的代码将不起作用。
如果我想初始化一个const
类型的长数组该怎么办
int main (){
const int ar[100];
//this is invalid in c++
//something like this
for (int i=0;i <100;++i)
ar[i]=i;
return 0;
}
除了使用问题中提出的#define
方法之外,还有其他方法吗?
没有办法直接做到这一点。
在c++中,解决这个问题的一种方法是利用这样一个事实:在它们的构造函数中,const
对象仍然是可修改的。因此,可以将数组包装成一个类并在构造函数
struct Arr
{
int a[100];
A()
{
for (unsigned i = 0; i < 100; ++i)
a[i] = i;
}
};
然后直接声明
const Arr arr;
当然,现在您必须将其作为arr.a[i]
访问,除非您覆盖Arr
中的操作符。
你可以使用一个技巧…初始化一个常规数组,然后获取对const数组的引用:
int arr[100];
for (int i=0; i<100; i++) arr[i] = i*i;
const int (&carr)[100] = arr;
相关文章:
- 如果分配数组引发异常,是否应该释放该数组
- 如果我在字符数组上使用 close() 会发生什么?
- 检查数组中是否有字符串中的值,如果没有,则添加它
- 如果我在相应 char 数组的声明中为其提供额外的元素,是否会自动设置 NULL?
- 如果我知道只会使用现有元素,我可以在数组开头之前传递指针吗?
- 如果我使用malloc()而不是堆栈数组,OpenGL不会渲染对象
- 如果你有一个固定大小的数组,你需要遍历它!n次,使用二进制搜索如何改变时间复杂性
- 在数组中查找元素,如果找到则返回Find,否则返回not Find
- 如果类的成员,C++数组会导致崩溃
- 如果用户输入的输入大于 char 数组,则 cin.getline 会跳过输入提醒
- 如果数组长度为 100000,则使用合并排序对反转进行计数会给出负数
- 如果带有字符数组的语句无法正常工作
- 如果我们没有在 C++ 中传递大小变量,则通过函数查找数组的大小
- 如果数组中有重复的数字,如何返回'false'?
- 如果数组变量在 c# 代码中定义为“ref”参数,则如何传递数组变量
- 如果数组大小未知,如何将函数数组作为参数传递
- 如果数组是否溢出,则打印
- C++While循环,如果数组等于零,则停止该循环
- 使用函数填充数组中的数字.如果数组已满,则该数字将在第二个数组中填充
- 如果数组很大,使用指针作为c++类成员是更有效的方法吗?