Работает ли список инициализации параметров конструктора иначе, чем использование оператора присваивания внутри конструктора?
У меня есть следующий код:
class Person1
{
public:
int age;
string name;
double weight;
double height;
Person1();
Person1(int age, string name, double weight, double height);
};
Person1::Person1()
{
}
Person1::Person1(int age, string name, double weight, double height)
//: m_age{age}, m_name{name}, m_weight{weight}, m_height{height}
{
// this->age = age;
// this->name = name;
// this->height = height;
// this->weight = weight;
age = age;
name = name;
height = height;
weight = weight;
}
void ModifyPerson1(Person1 person1)
{
person1.name = "Jerry";
cout << person1.age << " " << person1.name << " " << person1.weight << " " << person1.height << endl;
}
int main()
{
Person1 person1(15,"Tom",140,5);
cout << person1.age << " " << person1.name << " " << person1.weight << " " << person1.height << endl;
ModifyPerson1(person1);
cout << "Name after modification : " << person1.name << endl;
return 0;
}
OP для приведенного выше кода:
-272632464 6.95313e-310 2.12202e-314
-272632464 Джерри 6.95313e-310 2.12202e-314
Название после модификации:
Программа завершилась с кодом выхода: 0
Если я использую либо список инициализации, либо оператор this-› для конструктора, результат будет таким, как ожидалось:
15 Том 140 5
15 Джерри 140 5
Имя после модификации : Том
Программа завершилась с кодом выхода: 0
Я серьезно не могу понять, почему поведение отличается.