В этом коде:
#include <iostream>
using std::cout;
class Foo {
public:
Foo(): egg(0) {}
Foo(const Foo& other): egg(1) {}
int egg;
};
Foo bar() {
Foo baz;
baz.egg = 3;
return baz;
}
int main(void) {
Foo spam(bar());
cout << spam.egg;
return 0;
}
вывод 3
, тогда как я ожидал, что оно будет 1
.
Это означает, что конструктор копирования не вызывается в строке Foo spam(bar())
.
Я предполагаю, что функция bar
не возвращает ссылку.
Не могли бы вы объяснить, что действительно происходит при инициализации spam
?
Я извиняюсь заранее, если это тупой вопрос.
Спасибо!