소년코딩

05.08 - auto

C++ 11에서 타입 추론 (Type inference in C++ 11)

C++ 11에서 auto 키워드는 유용하다.

double d = 5.0;

5.0이 부동 소수점 숫자 리터럴이라는 것을 이미 알고 있다면, 왜 d의 타입(=자료형)을 double이라고 명시적으로 선언해야 할까? 변수를 초기화할 때 사용하는 값을 기준으로 적절한 타입을 추론하도록 하면 편하지 않을까?

auto 키워드는 선언된 변수의 초기화 식을 사용하여 해당 형식을 추론하도록 컴파일러에 지시한다.

즉, auto 키워드를 사용하면 초깃값의 형식에 맟춰 선언하는 인스턴스(변수)의 형식이 '자동'으로 결정된다. 이것을 타입 추론(type inference)이라고 한다.

auto d = 5.0;   // 5.0 is a double literal, so d will be type double
auto i = 1 + 2; // 1 + 2 evaluates to an integer, so i will be type int

변수를 함수의 반환 값으로 초기화 할 때도 사용 가능하다.

int add(int x, int y)
{
    return x + y;
}

int main()
{
    auto sum = add(5, 6); // add() returns an int, so sum will be type int
    return 0;
}

주의: 이 기능은 생성 시 변수를 초기화할 때만 작동한다. 초기화 값을 사용하지 않고 생성된 변수는 이 기능을 사용할 수 없다.


auto 키워드는 함수 매개 변수와 함께 사용할 수 없다. (The auto keyword can’t be used with function parameters)

#include <iostream>

void addAndPrint(auto x, auto y)
{
    std::cout << x + y;
}

위 코드는 작동하지 않는다. 컴파일러가 컴파일 시 함수 매개 변수 x와 y에 대한 타입을 추론할 수 없기 때문이다.


C++ 14에서 함수를 위한 타입 추론 (Type inference for functions in C++14)

C++ 14는 auto 키워드가 함수의 반환 타입을 자동으로 추론할 수 있도록 확장되었다.

auto add(int x, int y)
{
    return x + y;
}

x + y는 정수로 평가되기 때문에 컴파일러는 add() 함수가 int 타입의 반환 값을 가져야 한다고 추론한다.

위 문법은 좋아 보일 수도 있지만 사용하지 않는 게 좋다. 함수의 반환 타입은 호출자가 함수에서 어떤 값을 반환할지 예상하는데, auto 키워드를 사용하면 잘못 해석할 수 있으며, 이로 인해 의도하지 않은 오류가 발생할 수 있다.


cpp 번역: 이 포스트의 원문은 http://www.learncpp.com/cpp-tutorial/4-8-the-auto-keyword/ 입니다.

'C++ 이야기 > 05. 다양한 타입' 카테고리의 다른 글

C++ 05.08 - auto  (0) 2018.07.08
C++ 05.07 - 구조체, struct  (0) 2018.07.07
C++ 05.06 - typedef  (1) 2018.07.04
C++ 05.05 - enum class  (1) 2018.07.04
C++ 05.04 - 열거형, enum  (2) 2018.07.03
C++ 05.03 - 문자열, std::string  (0) 2018.07.03
댓글 로드 중…

블로그 정보

소년코딩 - 소년코딩

소년코딩, 자바스크립트, C++, 물리, 게임 코딩 이야기

최근에 게시된 이야기