C 11에서 auto 키워드는 초기화 프로그램을 기반으로 변수 유형을 자동으로 추론하는 편리한 방법을 제공합니다. . 그러나 auto가 값 또는 참조로 해석되는지 여부와 관련하여 고려해야 할 특정 사항이 있습니다.
규칙은 간단합니다. 변수가 선언되는 방식에 따라 다릅니다.
<code class="cpp">int i = 5; auto a1 = i; // value auto &a2 = i; // reference</code>
첫 번째 경우 a1은 참조로 선언되지 않았기 때문에 값입니다. 두 번째 경우에는 a2가 명시적으로 하나로 선언되었기 때문에 참조입니다.
제공한 예에 이 규칙을 적용해 보겠습니다.
다음 코드는 템플릿 메타프로그래밍을 사용하여 이 동작을 보여줍니다.
<code class="cpp">#include <typeinfo> #include <iostream> template< typename T > struct A { static void foo(){ std::cout << "value" << std::endl; } }; template< typename T > struct A< T&> { static void foo(){ std::cout << "reference" << std::endl; } }; float& bar() { static float t=5.5; return t; } int main() { int i = 5; int &r = i; auto a1 = i; auto a2 = r; auto a3 = bar(); A<decltype(i)>::foo(); // value A<decltype(r)>::foo(); // reference A<decltype(a1)>::foo(); // value A<decltype(a2)>::foo(); // value A<decltype(bar())>::foo(); // reference A<decltype(a3)>::foo(); // value }</code>
출력:
value reference value value reference value
이는 auto 유형이 초기화 유형이 아니라 선언에 의해 결정된다는 것을 확인시켜 줍니다.
위 내용은 C 11의 `auto`는 언제 값이나 참조를 추론합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!