클래스 내에서 비공개 유형으로 작업할 때 이상한 상황에 직면할 수 있습니다. 유형 이름을 사용하는 변수에서 오류가 발생합니다. 'auto'를 사용하여 유형이 작동하는 것 같다고 추론합니다.
class Foo { struct Bar { int i; }; public: Bar Baz() { return Bar(); } };
주어진 코드에서 Foo에는 비공개 중첩 유형 Bar가 포함되어 있습니다. 다음 줄을 실행하면 오류가 발생합니다.
Foo::Bar b = f.Baz(); // error
예기치 않게 'auto'를 사용하면 문제가 해결됩니다.
auto b = f.Baz(); // ok
이것이 허용되는 이유는 무엇입니까?
'자동' 유형 추론과 템플릿 유형 추론은 모두 유사한 기본 메커니즘을 공유합니다. 이 경우 '템플릿' 함수가 개인 유형과 함께 작동하는 방식과 유사합니다.
template <typename T> void fun(T t) {} int main() { Foo f; fun(f.Baz()); // ok }
접근성 공개
개인 유형의 객체를 템플릿 함수를 사용하거나 'auto'를 사용하여 유형을 추론하는 이유는 이름이 숨겨져 있어도 유형 자체에 액세스할 수 있다는 사실에서 비롯됩니다. 컴파일러는 유형 추론을 통해 객체의 구조를 풀어 활용을 가능하게 합니다.
따라서 개인 유형의 이름은 액세스할 수 없지만 해당 유형 정보는 계속 사용할 수 있으므로 'auto'와 같은 메커니즘을 통해 조작이 가능합니다. ' 또는 템플릿 공제.
위 내용은 명시적 선언이 실패하는데 'auto'가 개인 유형에서 작동하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!