>백엔드 개발 >C++ >C에서 'auto'를 사용하면 개인 유형을 추론할 수 있나요?

C에서 'auto'를 사용하면 개인 유형을 추론할 수 있나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-19 20:51:12146검색

Can `auto` Deduce Private Types in C  ?

Private 유형에 'auto' 사용

C에서는 비공개 유형에 'auto'를 사용할 수 있다는 것이 직관적이지 않게 보일 수 있습니다. 다음 코드는 다음과 같습니다.

class Foo {
    struct Bar { int i; };
public:
    Bar Baz() { return Bar(); }
};

일반적으로 액세스를 시도하면 비공개 유형 'Bar'를 직접 사용하면(예: Foo::Bar b = f.Baz();) 오류가 발생합니다. 그러나 'auto'를 사용하는 경우에는 그렇지 않습니다.

int main() {
    Foo f;
    auto b = f.Baz();         // ok
    std::cout << b.i;
}

이 동작은 'auto' 규칙과 템플릿 유형 추론 간의 유사성으로 인해 발생합니다. 개인 유형을 템플릿 함수에 전달할 수 있는 방법과 유사합니다.

template <typename T>
void fun(T t) {}

int main() {
    Foo f;
    fun(f.Baz());         // ok
}

이 기능은 개인 유형의 이름에는 액세스할 수 없지만 유형 자체는 계속 사용할 수 있다는 사실에서 비롯됩니다. 결과적으로 'auto'는 private 유형임에도 불구하고 유형을 올바르게 추론하여 'b' 변수에 할당할 수 있습니다.

위 내용은 C에서 'auto'를 사용하면 개인 유형을 추론할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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