C_C++

(C++) auto 키워드: 자동 타입 추론(automatic type deduction)

enjoy-country-life 2022. 10. 2. 14:45
반응형

auto

초기식에서 선언된 변수의 형식을 추론합니다.
(C#의 var 형식과 비슷해 보입니다.)
auto 키워드는 형식의 자리 표시자이지만 그 자체가 형식은 아닙니다. 따라서 sizeof 와 같은 연산자에 사용할 수 없습니다.
auto 키워드는 복잡한 형식의 변수를 선언하는 간단한 방법입니다. 예를 들어 초기화 식에 템플릿, 함수에 대한 포인터 또는 멤버에 대한 포인터가 포함된 변수를 선언하는 데 auto를 사용할 수 있습니다.

#include <iostream>
using namespace std;
 
int main()
{
    int count = 10;
    int& countRef = count;
    auto myAuto = countRef;
 
    countRef = 11;
    cout << count << " ";
 
    myAuto = 12;
    cout << count << endl;
}

 

#include <initializer_list>
 
int main()
{
    // std::initializer_list<int>
    auto A = { 1, 2 };
 
    // std::initializer_list<int>
    auto B = { 3 };
 
    // int
    auto C{ 4 };
 
    // C3535: cannot deduce type for 'auto' from initializer list'
    auto D = { 5, 6.7 };
 
    // C3518 in a direct-list-initialization context the type for 'auto'
    // can only be deduced from a single initializer expression
    auto E{ 8, 9 };
 
    return 0;
}

 

 

범위 기반 for 문에서 루프 매개 변수를 선언하는 데 사용되는 경우 auto
예를 들어 for (auto& i : iterable) do_action(i);

#include <iostream>
using namespace std;
 
 
int main()
{
    int a[5] = { 1,2,3,4,5 };
    for (int i = 0; i < 5; i++)
        cout << a[i] << " ";
    cout << endl;
   
    for (int i : a)
        cout << i << " ";
    cout << endl;
 
    for (auto i : a)
        cout << i << " ";
    cout << endl;
 
    return 0;
}

 

범위 기바 for문에서 auto를 형식으로 배열의 값을 할당할 때는 반드시 참조 연산자(&)를 사용해야 합니다.

#include <iostream>
using namespace std;
 
int main()
{
    int a[5];
 
    for (auto& i : a)          // <<--------- 
        i = 5;
 
    for (auto i : a)
        cout << i << " ";
    cout << endl;
 
    return 0;
}

 

아래의 코드 조각은 auto 키워드를 사용할 수 있는  몇 가지 방법을 보여 줍니다.

int j = 0;  // Variable j is explicitly type int.
auto k = 0; // Variable k is implicitly type int because 0 is an integer.

두 선언은 동일합니다.
첫 번째 문에서 변수 j 는 형식 int으로 선언됩니다.
두 번째 문에서는 초기화 식(0)이 정수이므로 변수 k 가 형식 int 으로 추론됩니다.
초기식에서 선언된 변수의 형식을 추론합니다.

 

 

728x90
반응형