여기에 사용할 용어가 무엇인지 확실하지 않아 정보를 찾기가 어려워졌습니다. 이 후 내 코드 (히트 컴파일, 몇 곳을 업데이트하는 것을 잊어 버린 것을 깨달았습니다. 어쨌든 컴파일되고 오류없이 실행되었습니다.)을 통해 간단한 예제를 통해 확인했습니다.포함 된 유형의 매개 변수 구성
다른 클래스를 포함하는 컨테이너 클래스가 있습니다. 클래스에 포함 된 const 참조를 사용하는 생성자가 있습니다. 컨테이너 클래스에 대한 const 참조를 사용하는 또 다른 함수가 있습니다. 포함 된 클래스의 인스턴스에 함수를 전달할 수 있으며 자동으로 컨테이너 클래스의 임시 인스턴스를 자동으로 생성합니다. 경고가 없습니다 (-Wall -pedantic -Wextra -Werror
).
#include <iostream>
class A { // Contained class.
public:
A(int i) : a_number_(i) {}
void print() const { std::cout << a_number_ << "\n"; }
private:
int a_number_;
};
class A_Container { // Container class.
public:
~A_Container() { delete a_; }
A_Container(const A& a) : a_(new A(a)) { std::cout << "I was called!\n"; }
const A& getA() const { return *a_; }
private:
A* a_;
};
void foo(const A_Container& container) { // This func takes a container...
container.getA().print();
}
int main() {
A a(147);
foo(a); // ...but I'm passing it the contained class.
return 0;
}
출력 :이 무엇을
I was called!
147
라고? 이러한 유형의 변환에 필요한 요구 사항은 무엇입니까?
의 의미는이 작동한다는 것을 알 수 있지만 컴파일러 마술보다 더 많은 부분이 있습니까?
편집 :
유용한 링크 : 그것은 단일 인자 생성자 explicit
을 표시하지가있는 경우 암시 적으로 당신을 위해 컨테이너 클래스를 구성합니다 ++ What does the explicit keyword mean?