[C++ STL] auto

이번 글에서는 auto에 대해 설명 드리겠습니다.

1. 컴파일 시, 형을 결정하는 'auto'

auto는 변수를 초기화 할때 값에 따라서 자동으로 형을 결정.
auto는 지역 변수로만 가능, 멤버 변수, 전역 변수, 인자로 사용 불가능.

#include <iostream>

int main()
{
	// char*
	auto Name = "Name1";
	std::cout << Name << std::endl;

	// int
	auto Age = 29;
	std::cout << Age << std::endl;
	
	system( "pause" );

	return 0;
}

당연히 포인터나 참조 변수도 가능

int main()
{
	// int*
	auto *pAge = &Age;
	std::cout << *pAge << std::endl;

	// int&
	auto &rAge = Age;
	std::cout << rAge << std::endl;
    
	system( "pause" );

	return 0;
}

구조체 또한 가능

struct Character {
	char *Name;
	int Age;
};

int main()
{
	// Character
	auto *pCharacter = new Character();
	pCharacter->Name = "Name2";
	pCharacter->Age = 30;

	std::cout << pCharacter->Name << std::endl;
	std::cout << pCharacter->Age << std::endl;
    
	system( "pause" );

	return 0;
}

클래스 또한 가능(옳은 코드는 아님)

class CharacterClass {
public :
	char *pcName;
	int iAge;

	CharacterClass( char *Name, int Age ) {
		pcName = Name;
		iAge = Age;
	}
};

int main()
{
	// Class
	auto *pClass = new CharacterClass( "Name3", 40 );
	std::cout << pClass->pcName << std::endl;
	std::cout << pClass->iAge << std::endl;
    
	system( "pause" );

	return 0;
}
2. auto 요약
  1. 사용 시 초기화 해야함
  2. 지역변수에서만 사용 가능
  3. 포인터, 참조, const, 구조체, 사용자 정의 클래스에서도 사용 가능
3. 전체 코드
#include <iostream>

struct Character {
	char *Name;
	int Age;
};

class CharacterClass {
public :
	char *pcName;
	int iAge;

	CharacterClass( char *Name, int Age ) {
		pcName = Name;
		iAge = Age;
	}
};

int main()
{
	// char*
	auto Name = "Name1";
	std::cout << Name << std::endl;

	// int
	auto Age = 29;
	std::cout << Age << std::endl;

	// int*
	auto *pAge = &Age;
	std::cout << *pAge << std::endl;

	// int&
	auto &rAge = Age;
	std::cout << rAge << std::endl;
	
	// Character
	auto *pCharacter = new Character();
	pCharacter->Name = "Name2";
	pCharacter->Age = 30;

	std::cout << pCharacter->Name << std::endl;
	std::cout << pCharacter->Age << std::endl;

	// Class
	auto *pClass = new CharacterClass( "Name3", 40 );
	std::cout << pClass->pcName << std::endl;
	std::cout << pClass->iAge << std::endl;

	system( "pause" );

	return 0;
}