Сразу много нового открыл для себя, написав для прикола такой код:
#include <iostream>
struct Sobr
{
public:
Sobr(const char *_name, int _x)
: name(_name)
, x( _x )
{
std::cout << "C Sobr(" << ((_name)?_name:"null") << ") " << (void*) this << "\n";
}
~Sobr()
{
std::cout << "~ Sobr() " << (void*) this << "\n";
}
const char *name;
int x;
};
static const struct Sobr sss[4] =
{
{ "first", 1 }
, {"second", 2 }
, {"third", 3 }
, { 0, 0 }
};
int main ( void )
{
std::cout << "Listing...\n";
const Sobr *s = &sss[0];
for ( ; s->x; ++s )
std::cout << s->name << "\n";
return 0;
}
1) Оказывается, каждый «{„xxxxx“, 99999 }» вызвал конструктор.
2) Появился странный ворнинг. Что бы он значил?
sobriety.cpp:30:1: warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x
sobriety.cpp:30:1: warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x
sobriety.cpp:30:1: warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x
sobriety.cpp:30:1: warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x
который пропадает, если писать (всё остальное работает так же)
static const struct Sobr sss[4] =
{
Sobr ("first", 1 )
, Sobr("second", 2 )
, Sobr("third", 3 )
, Sobr( 0, 0 )
};
3) причём в этом случае можно сделать такой патч:
- static const struct Sobr sss[4] =
+ static const struct Sobr sss[] =
а почему тот вариант без явного указания числа элементов не работает?