| --- ( @ 2007-01-08 01:12:00 |
| Entry tags: | cpp, cpp-standard, pod-types, tech |
Не давно зашел разговор про то, что же считать POD типом. Я даже как то не смог, четко сказать, чего там быть не должно, единственное, о чем вспомнил - отсутствие виртуальных функций.
Вчера полез в стандарт и все что нашел:
9/4
A POD-struct is an aggregate class that has no non-static data members of type non-POD-struct, non-POD-union (or array of such types) or reference, and has no user-defined copy assignment operator and no user-defined destructor. Similarly, a POD-union is an aggregate union that has no non-static data members of type non-POD-struct, non-POD-union (or array of such types) or reference, and has no userdefined copy assignment operator and no user-defined destructor. A POD class is a class that is either a POD-struct or a POD-union.
Вот тут я нашел следующее:
As an example, the C declaration struct Fred x; does not initialize the members of the Fred variable x. To make this same behavior happen in C++, Fred would need to not have any constructors. Similarly to make the C++ version of copying the same as the C version, the C++ Fred must not have overloaded the assignment operator. To make sure the other rules match, the C++ version must not have virtual functions, base classes, non-static members that are private or protected, or a destructor. It can, however, have static data members, static member functions, and non-static non-virtual member functions.
Так все таки можно ли в POD-типе иметь конструктор или нет?