>백엔드 개발 >C++ >명시적 선언이 실패하는데 'auto'가 개인 유형에서 작동하는 이유는 무엇입니까?

명시적 선언이 실패하는데 'auto'가 개인 유형에서 작동하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-16 00:57:09658검색

Why Does 'auto' Work with Private Types While Explicit Declaration Fails?

비공개 유형에 'auto' 사용: 접근성 공개

클래스 내에서 비공개 유형으로 작업할 때 이상한 상황에 직면할 수 있습니다. 유형 이름을 사용하는 변수에서 오류가 발생합니다. '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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.