Я люблю язык С++.
Я пока знаю его плохо, потому что изучаю всего 16 лет.
Но за эти годы я успел осознать, что никакие другие языки программирования мне не нужны.
Я чётко решил для себя, что работать буду только в компаниях, где пишут на С++.
Все (ну почти) мои проекты написаны на С++.
И все будущие проекты почти наверняка будут на нём написаны.
И всё же...
Тема не для холивара!
В ней мы будем собирать интересные головоломки, связанные с подводными камнями (а порой и лёгким налётом неадекватности) стандарта языка. Просьба не рассказывать про свои любимые Rust/Go/Swift и тем более жаб и шарпеев. Для них можно создать отдельную тему. В качестве исключения разрешается Дяде Мише написать пост о том, что он не понимает, зачем вообще нужны кресты (а также винды новее WinXP, студии новее 6-й и движки новее свежего XashNT), потому что обычного Си вполне хватает, и там нет вот этих вот (вписать нужное). Но только ему и только один раз!
Итак, начнём.
C++ Source Code:
1
struct foo {
2
foo() = default;
3
int a;
4
};
5
6
struct bar {
7
bar();
8
int b;
9
};
10
11
bar::bar() = default;
12
13
int main() {
14
foo a{};
15
bar b{};
16
}
что будет в a.a и b.b?
Ответ под катом.
Скрытый текст:
Этот текст скрытый. Вы должны оставить хотя бы одно сообщение в теме, чтобы его увидеть.
Да, вроде не плохо объяснено.
Если я правильно понял определения, то в baz
C++ Source Code:
1
struct baz
2
{
3
baz() {}
4
int z;
5
};
конструктор тоже user-provided, как и bar, то есть по стандарту поведение у них одинаковое (по крайней мере у меня это воспроизводится одинаково). Значит ли, что эти определения конструктора одинаковы?