> Der g++ versteht das sehr wohl:
>
> static myClass classObject( (int[]){ 1, 2, 3} );
>
> Meines Wissens geht es aber bei VC++ nicht; aber einen Versuch
> wäre es wert.
Das (int[]){1,2,3} ist ein Compound-Literal und ist im C99-, aber nicht
im C++-Standard spezifiziert. Der GCC erlaubt das Konstrukt auch in C++
(als Erweiterung), gibt jedoch mit der Compiler-Option -pedantic eine
entsprechende Warnung aus.
Im nächsten C++ (C++0x) wird es so genannte Initializer-Lists geben.
Damit kann man bspw. folgendes schreiben:
1 | #include <initializer_list>
|
2 |
|
3 | class myClass
|
4 | {
|
5 | public:
|
6 | myClass(std::initializer_list<int> i);
|
7 | private:
|
8 | int m_i[3];
|
9 | };
|
10 |
|
11 | myClass::myClass(std::initializer_list<int> i)
|
12 | {
|
13 | for (int j=0; j<3; j++)
|
14 | m_i[j] = i.begin()[j];
|
15 | }
|
16 |
|
17 | static myClass classObject({1, 2, 3});
|
Der GCC unterstützt das ebenfalls, wenn man die Option -std=c++0x
angibt. Beim MS-Compiler müsste man das ausprobieren.