auto를 사용하면 초깃값의 형식에 맞춰 선언하는 인스턴스(변수)의 형식이 자동으로 결정되는 기능이다. 타입 추론(type inference)이라고 한다.
이 기능은 생성 시 변수를 초기화할 때만 작동한다. 초기화 값을 사용하지 않고 생성된 변수는 이 기능을 사용할 수 없다. 이 이유는 초기화된 값을 기준으로 자료형을 선택하기 때문이다.
#include <iostream>
using namespace std;
int main( )
{
int a = 10;
float b = 3.5;
auto sum = a+b;
cout << sum;
}
sum은 13.5가 출력된다. int형 변수 a와 float형 변수 b의 합을 auto 키워드를 통해 sum 변수에 저장하고 출력한 것이다.
#include <iostream>
using namespace std;
int add(int x, int y) {
return x + y;
}
int main() {
auto sum = add(5, 7);
cout << "sum : " << sum << "\n";
return 0;
}
실행 결과는 sum : 12가 나온다.
#include <iostream>
using namespace std;
void addAndPrint(auto x, auto y) {
cout << x + y;
}
int main() {
addAndPrint(5, 7);
return 0;
}
이 상황에서는 에러가 발생한다.
#include <iostream>
using namespace std;
auto addAndPrint(int x, float y) {
return x + y;
}
int main() {
cout << addAndPrint(5, 8.5);
return 0;
}
실행결과로 13.5가 나온다.
#include <iostream>
using namespace std;
int main() {
//포인터와 참조자를 붙일 수 있음
int a = 1.2;
auto &b = a;
auto *c = &b;
}
#include <iostream>
using namespace std;
class Market {
int apple;
int banana;
public:
Market(int a, int b) { apple = a; banana = b; }
int getapple() { return apple; }
int getbanana() { return banana; }
};
struct Person {
string name;
int age;
};
int main() {
Market M(5, 8);
auto m = M;
cout << "--- 클래스 ---\n";
cout << "apple : " << m.getapple() << "\n";
cout << "banana : " << m.getbanana() << "\n";
cout << "--------------\n";
cout << "--- 구조체 ---\n";
Person P = { "홍길동",50 };
auto p = P;
cout << "name : " << P.name << "\n";
cout << "age : " << P.age << "\n";
cout << "--------------\n";
}

#include <iostream>
using namespace std;
int SUM(int a, int b) { return a + b; }
int main() {
//함수포인터나, 함수 자체도 가능함 -> 이러한 함수가 람다 함수
//함수 포인터 -> 구조체나 클래스의 함수 포인터도 가능
auto s = SUM;
cout << "sum : " << s(1, 7) << "\n";
}
실행 결과는 sum : 8로 출력된다.
#include <iostream>
using namespace std;
int main() {
//함수 (매개변수 없을 시)
auto test1 = [] {cout << "hello wolrd" << endl; };
cout << "test1 : ";
test1();
//함수 (매개변수 존재 시)
auto test2 = [](int a) {return a; };
cout << "test2 : " << test2(7) << endl;
//함수 (함수 내부에서 외부의 지역변수 참조 시 [ ]안에 &를 사용함)
int b = 7;
auto test3 = [&](int a) {return b + a; };
cout << "test3 : " << test3(3) << endl;
}

#include <iostream>
using namespace std;
int main() {
//함수 (참조자 리턴 시)
//함수의 인자가 속한 괄호에 -> 를 명시해주고 리턴자료형 &를 붙여줌
//참조자 외에는 자료형을 명시하지 않아도 return값을 기준으로 auto 자동으로 리턴자료형을 판단함
//이 때 주의점은 auto&를 하게 되면 함수의 참조자가 되는 것이지 리턴형의 참조자가 되는 것은 아님!
auto test = [](int* a)->int& {return *a; };
return 0;
typeid(변수이름).name()을 사용하면 자료형을 확인할 수 있다.
#include <iostream>
int main() {
auto arr = { 1, 2, 3, 4 };
for (auto number : arr)
std::cout << number << '\n';
return 0;
}