Auto on Private Types
auto를 사용하여 변수를 선언하면 비공개 클래스 멤버를 처리할 때 혼란스러울 수 있습니다. 이 예에서는 코드가 성공적으로 컴파일됩니다.
class Foo { struct Bar { int i; }; public: Bar Baz() { return Bar(); } }; int main() { Foo f; auto b = f.Baz(); std::cout << b.i; }
이 코드가 유효합니까? 그렇다면 왜 그렇습니까?
코드가 실제로 유효합니다. auto는 템플릿 유형 추론과 동일한 규칙을 따릅니다. 이유는 둘 다 auto b = f.Baz(); 그리고 fun(f.Baz()); compile은 이름이 private인데도 Foo::Bar 유형을 사용할 수 있기 때문입니다.
이름이 private인데 왜 유형을 사용할 수 있나요?
개인 유형의 접근 불가능성은 해당 이름에만 적용됩니다. 유형 자체는 계속 사용할 수 있으므로 이를 클라이언트 코드로 반환하고 템플릿 함수에 전달할 수 있습니다.
위 내용은 'auto'를 사용한 Private 클래스 멤버 유형 공제는 C에서 유효합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!