변수를 초기화할 때, 명시적 타입을 적는 대신 auto 타입 지정자를 넣을 수 있다. auto는 그것의 초기자로부터 개체의 타입을 추론하게 되는데, 타입은 변수, const나 constexpr일 수 있다. 하지만 구문의 타입은 레퍼런스가 될 수 없다. 왜냐하면 레퍼런스는 암시적으로 구문에서 참조되지 않기 때문이다.

다시 말해, auto는 초기자의 타입을 위한 플레이스홀더(placeholder)가 된다.

#include <iostream>
#include <typeinfo>

using namespace std;

int main() {
	auto sum = 1 + 3;
	cout << sum << endl;
	cout << typeid(sum).name() << endl;
	return 0;
}
  • c++ 11에서 타입 추론.
  • auto 키워드는 선언된 변수의 초기화 식을 사용하여 해당 형식을 추론하도록 컴파일러에 지시한다.
  • auto 키워드를 사용하면 초깃값의 형식에 맞춰 선언하는 인스턴스(변수)의 형식이 자동으로 결정된다. 이것을 타입추론(type inference)라고 한다.
  • 단 auto 사용에는 주의해야할 점이 있는데 생성 시 변수를 초기화 할때만 작동한다. 초기화 값을 사용하지 않고 생성된 변수는 이 기능을 사용할 수 없다.

 

  • 또한 auto 키워드는 함수 매개 변수와 함께 사용할 수 없다.

range-based for statement

 

#include <iostream> 
using namespace std;

int main() 
{ 
	int fibonacci[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 };
	for (int number : fibonacci)  cout << number << ' '; 

return 0; 
}

element_declaration은 배열 요소와 같은 자료형을 가져야 하므로, auto keyword를 사용해서 C++가 자료형을 추론하도록 하는것도 좋은 방법이다.

#include <iostream>
using namespace std;

int main() {
	int arr[5];
	for (int i = 0; i < 5; i++) arr[i] = i;
	for (auto num : arr) cout << num << ' ';
	return 0;
}

 

위의 경우 각 배열의 요소가 num으로 복사가 된다. 

#include <iostream>
using namespace std;

int main() {
	int arr[5];
	for (int i = 0; i < 5; i++) arr[i] = i;
	for (auto &num : arr) cout << num << ' '; //using reference
	return 0;
}

위의 경우 num은 현재 반복된 배열 요소에 대한 참조이므로 값이 복사되지 않지만, num을 수정하면 배열의 요소에 영향을 준다. 이런 경우 읽기 전용인 const로 num을 만들어 볼 수 있다.

#include <iostream>
using namespace std;

int main() {
	int arr[5];
	for (int i = 0; i < 5; i++) arr[i] = i;
	for (const auto &num : arr) cout << num << ' ';
	return 0;
}
반응형

'Prog&Algol' 카테고리의 다른 글

Algo | C++ | priority Queue  (0) 2022.03.20
C++ | Range-based for loops  (0) 2022.03.20
C++ | 초기화 리스트/initialize_list | after c++11  (0) 2022.03.20
C++ | using namespace  (0) 2022.03.17
2019 Winter Kakao Internship - Hotel room  (0) 2020.04.14

+ Recent posts