13

I used C before (embedded stuff), and I can initialize my arrays like that:

int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };

i.e. I can specify indexes inside initializer. Currently I'm learning Qt/C++, and I can't believe this isn't supported in C++.

I have this option: -std=gnu++0x, but anyway it isn't supported. (I don't know if it is supported in C++11, because Qt works buggy with gcc 4.7.x)

So, is it really not supported in C++? Or maybe there's a way to enable it?

UPD: currently I want to initialize const array, so std::fill won't work.

Dmitry Frank
  • 10,417
  • 10
  • 64
  • 114

3 Answers3

7

hm, you should use std::fill_n() for that task...

as stated here http://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html the designated inits (extention) are not implemented in GNU C++

edit: taken from here: initialize a const array in a class initializer in C++

as a comment said, you can use std:vector to get the result desired. You could still enforce the const another way around and use fill_n.

int* a = new int[N];
// fill a

class C {
  const std::vector<int> v;
public:
  C():v(a, a+N) {}
};
Community
  • 1
  • 1
Najzero
  • 3,164
  • 18
  • 18
3

After years, I tested it just by chance, and I can confirm that it works in g++ -std=c++11, g++ version is 4.8.2.

Dmitry Frank
  • 10,417
  • 10
  • 64
  • 114
2

No, it is not possible to do it in C++ like that. But you can use std::fill algorithm to assign the values:

int widths[101];
fill(widths, widths+10, 1);
fill(widths+10, widths+100, 2);
fill(widths+100, widths+101, 3);

It is not as elegant, but it works.

Juraj Blaho
  • 13,301
  • 7
  • 50
  • 96