Я всегда думал, что есть только два значения по умолчанию construcors: конструктор без аргументов и копия construtor.
Но сегодня я написал что-то вроде этого:
Сначала я хотел убедиться, что в C ++ инициализация структур в c-стиле все еще действительна.
struct Foo{
int a;
bool b;
char* c;
double d;
};
//..
Foo arr[2]={{0, true, "a", 3.14}, {1, false, "z", 42.0}};
хорошо, это работает. Но затем я решил проверить, что произойдет после изменения struct
на class
.
class Bar{
public:
int a;
bool b;
char* c;
double d;
};
//..
Bar arr[2]={{0, true, "a", 3.14}, {1, false, "z", 42.0}};//works
Bar bar; //works
Bar bar2=arr[1]; //works
//Bar bar3(2, false, "so", 7.0); //of course doesn't work
//first, second, third ways works...
это компилируется, если class Bar
не имеет никаких закрытых / защищенных полей (но может содержать методы). Таким образом, пока компилятор может создавать класс, который использует только простые свойства структур, он может быть скомпилирован.
[EDIT]
код //Bar bar3(2, false, "so", 7.0); //of course doesn't work
здесь не проблема;)
PS. Я все еще учу английский, но иногда я делаю глупые ошибки. Я делаю все возможное, пишу вопросы и ответы на английском языке, однако я был бы очень рад, если вы отредактируете мой пост в случае каких-либо ошибок. Обещаю, ваши усилия не пропадут даром.