В настоящее время я занимаюсь курсом C++ и пытаюсь получить глубокое понимание всего этого. я придумал несколько теорий, было бы здорово, если бы кто-то может подтвердить их:Переменные инициализации и конструкторы
Каждого переменный (локальный, глобальный, staic, член и не член) гарантировано иметь его т е р Вызываются перед первым использованием
Кортики примитивов, таких как int, по существу, не являются операциями, поэтому мы явно назначаем значение, но по умолчанию нет нулевого значения.
следующие классы семантически одинаковы (и должен генерировать идентичный код)
class A
{
int n;
};
и
class A
{
int n;
public:
A() : n() {}
};
и
class A
{
int n;
public:
A() { n = int(); }
};
Переменная п в каждом случае по-прежнему неинициализированным ,
EDIT:
Казалось, что я absolutetly недооценивать сложность этого вопроса, большинство моих предположений были неправы. Теперь я все еще пытаюсь выяснить основные правила инициализации объекта.
Я считаю, что это утверждение трудно поверить. class Bar {int n; } является POD, поскольку он неявно определен ctor is/trivial/(формальный термин из ISO). Тем не менее, он существует, и оба 'new Bar;' и 'new Bar()' называют это. В любом случае Bar :: Bar() не инициализирует Bar :: n – MSalters
"class B {int n;};" is * not * a POD, поскольку он содержит частный нестатический член 'n'. Однако, если он был определен как «класс B {public: int n;};" то это будет POD, и поэтому «n» будет инициализироваться значением, когда вы будете «new Bar()». –
Возможно ли, чтобы новичок полностью понял эту тему? Кажется, что существует так много правил и исключений :-( – codymanix