Я пытаюсь понять, как работает явный вызов конструктора в main, используя следующий код.
#include<iostream>
using namespace std;
class Dependency1
{
bool init;
public:
Dependency1() : init(true) {
std::cout << "Dependency1 construction"
<< std::endl;
}
void print() const {
std::cout << "Dependency1 init: "
<< init << std::endl;
}
};
class Dependency2 {
Dependency1 d1;
public:
Dependency2(const Dependency1& dep1): d1(dep1){
std::cout << "Dependency2 construction ";
print();
}
void print() const { d1.print(); }
};
void test( const Dependency1& dd1)
{
cout << " inside Test \n";
dd1.print();
}
int main()
{
test(Dependency1());
Dependency2 D1(Dependency1()); // this line does not work
return 0;
}
Функция test вызывается, когда конструктор Dependency1 () используется в качестве вызова функции вместо Dependency1 :: Dependency1 () и код работает отлично хорошо.
Теперь, если я использую аналогичную концепцию для создания объекта D1 Dependency2, он не работает.
Кажется, я делаю что-то не так, основываясь на неправильном понимании.
Необходимо знать, как компилятор разрешает вызов Dependency1 () в main, даже если разрешение области не используется, и почему оно не работает, когда я использую его в качестве параметра в конструкторе Dependency2
Спасибо,
Ананд