class A {
public:
A() { cout << "A()" << endl; }
};
class B {
public:
A a;
B(const A& a1) : a(a1) { cout << "B(const A&)" << endl; }
/* B(const A& a1) { a = a1; cout << "B(const A&)" << endl; } */
};
int main() {
B b(A()); /* no ouput */
}
Для вышеуказанного кода выхода не генерируется. Это связано с оптимизацией компилятора (копия elision), как обсуждалось в этом link?Конструктор не вызывается в этом классе агрегации
Но если у меня есть класс B конструктор и переписать код, как показано ниже:
class A {
public:
A() { cout << "A()" << endl; }
};
class B {
public:
A a;
B() {}
B(const A& a1) : a(a1) { cout << "B(const A&)" << endl; }
/* B(const A& a1) { a = a1; cout << "B(const A&)" << endl; } */
};
int main() {
B().a; // gives output A()
}
'B b (A());' Это объявление функции. Найдите «самый неприятный синтаксический разбор». – jrok