오븐 노트

[C++] 중괄호 초기화 { } 본문

Develop/C++

[C++] 중괄호 초기화 { }

오 븐 2023. 10. 16. 17:47
#include <iostream>
using namespace std;
#include <vector>
#include <list>
#include <deque>
#include <map>
#include <set>
#include <algorithm>

class Knight
{
public:
	Knight()
	{

	}

	Knight(int a, int b)
	{
		cout << "Knight(int, int)" << endl;
	}

	Knight(initializer_list<int> li) // 초기화 할때 사용하는 리스트 느낌?
	{
		cout << "Knight(initializer_list)" << endl;
	}
};

int main()
{
	// 중괄호 초기화 { }
	int a = 0;
	int b(0);
	int c{ 0 };

	Knight k1;
	Knight k2 = k1; // 복사 생성자 (대입 연산자X)

	Knight k3{ k2 }; // 복사 생성자
	Knight k30; // 기본 생성자
	k30 = { k1 }; // 대입 연산자

	vector<int> v1;
	v1.push_back(1);
	v1.push_back(2);
	v1.push_back(3);

	vector<int> v2(10, 1); // push_back 10번 한 효과
	int arr[] = { 1, 2, 3, 4 };

	// 중괄호 초기화
	// 1) vector 등 container와 잘 어울린다.
	vector<int> v3{ 1, 2, 3, 4 };

	// 2) 축소 변환 방지
	int x = 0;
	// double y(x);

	// 3) Bonus
	Knight k4{ }; // 기본 생성자

	// 주의점
	Knight k5{ 1, 2 }; // 인자를 2개만 넣어서 생성해도 initializer_list 우선으로 호출되어버린다.

	// 괄호 초기화 ()를 기본으로 간다
	// - 전통적인 C++ (거부감이 없음)
	// - vector 등 특이한 케이스에 대해서만 { } 사용

	// 중괄호 초기화 {}를 기본으로 간다
	// - 초기화 문법의 일치화
	// - 축소 변환 방지

	return 0;
}

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 - 인프런 | 강의
 
C++ 카테고리의 글은 인프런 Rookiss님의 강의를 공부하며 정리하는 내용입니다.
이미 알고 있는 내용도 다시 정리 되어있을 수 있습니다.

 

모든 글은 제가 공부하기 위해 작성합니다.

'Develop > C++' 카테고리의 다른 글

[C++] using  (0) 2023.12.07
[C++] nullptr  (0) 2023.12.07
[C++] auto  (0) 2023.10.03
[C++] algorithm  (0) 2023.09.30
[C++] 연습 문제  (0) 2023.08.31