본문 바로가기
Script/Modern C++

[Modern C++] Chapter 02. 중괄호 초기화 { }

by song.ift 2023. 5. 22.

GitHub : https://github.com/developeSHG/Modern-C/blob/a30dc0a22e2afcdb8ae81e9ca9e3f46fb125ab66/Modern%20C%2B%2B/Modern%20C%2B%2B/reset.cpp

 

GitHub - developeSHG/Modern-C: Modern C++

Modern C++. Contribute to developeSHG/Modern-C development by creating an account on GitHub.

github.com

 

 


 

 

cpp
닫기
#include <iostream> using namespace std; // 주제 : 중괄호 초기화 { } class Knight { public: }; int main() { // 중괄호 초기화 { } ​​​​int a = 0; ​​​​int b(0); ​​​​int c{ 0 }; ​​​​ ​​​​Knight k1; ​​​​Knight k2 = k1; // 복사 생성자 (대입 연산자가 아니다) ​​​​ ​​​​Knight k3; // 기본 생성자 ​​​​k3 = k1; // 대입 연산자 ​​​​ ​​​​Knight k4{ k2 }; ​​​​ ​​​​// 초기화하는 문법이 제각각이다. ​​​​ ​​​​vector<int> v1; ​​​​v1.push_back(1); ​​​​v1.push_back(2); ​​​​v1.push_back(3); ​​​​ ​​​​// 기존 방식 초기화 ​​​​vector<int> v2(10, 1); size를 10개를 만들고, 1로 초기화. ​​​​int arr[] = { 1, 2, 3, 4 }; ​​​​ ​​​​// C++11 이후 (새로운 방식의 초기화) ​​​​ ​​​​// 중괄호 초기화 장점 ​​​​// 1) vector 등 container와 잘 어울린다. ​​​​vector<int> v3{ 1, 2, 3, 4 }; ​​​​ ​​​​// 2) 축소 변환 방지 ​​​​int x = 0; ​​​​double y(x); // 타입이 달라서 데이터가 완전히 호환이 되지 않아 데이터가 간접적으로 손실이 되겠지만 컴파일 시, 별다른 문제없이 통과한다. ​​​​double y{ x }; // 굉장히 깐깐하게 동작해서 축소 변환을 허용하지 않아 에러를 뱉어낸다. (방지차원에서 효과적임) ​​​​ ​​​​// 3) Bonus ​​​​Knight k4(); // 기본 생성자 호출이 아닌 완전히 다른 방식인 그저 함수 호출 방식이다. ​​​​Knight k4{ }; // 온전히 기본 생성자 방식으로 만들어진다. ​​​​ ​​​​ ​​​​// 괄호 초기화 ()을 기본으로 한다 ​​​​// - 전통적인 C++ (거부감이 없음) ​​​​// - vector 등 특이한 케이스에 대해서만 { } 사용 ​​​​ ​​​​// 중괄호 초기화 { }를 기본으로 간다. ​​​​// - 초기화 문법의 일치화 ​​​​// - 축소 변환 방지 return 0; }

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

[Modern C++] Chapter 06. delete  (0) 2023.05.22
[Modern C++] Chapter 05. enum class  (0) 2023.05.22
[Modern C++] Chapter 04. using  (0) 2023.05.22
[Modern C++] Chapter 03. nullptr  (0) 2023.05.22
[Modern C++] Chapter 01. auto  (0) 2023.05.22

댓글