c++17

Uniform Initialization

2023년 7월 4일
c++11, c++17

Uniform Initialization # 객체를 생성자와 함께 호출하려면 ( ) 를 사용했다. 1// vector(size_type count, const T& value) 호출해서 생성 2vector<int> vec(3, 10); Most Vexing Parse 아래의 경우에는 무슨 일이 일어날까? 기본생성자? vector를 리턴하고 인자를 받지않는 vec 함수? c++에서는 이것을 함수의 선언으로 생각한다. 1vector<int> vec(); 2class A { 3 public: 4 A() { std::cout << "A 의 생성자 호출!" << std::endl; } 5}; 6class B { 7 public: 8 B(A a) { std::cout << "B 의 생성자 호출! ...

const와 constexpr

2023년 7월 3일
c++11, c++14, c++17

const # 변수를 상수화해서 값 변경이 불가능하도록 한다. 포인터 왼쪽에 const를 붙이면 해당 포인터로 접근하는 기능을 상수화 한다는 뜻이다. 하지만 컴파일 타임에 상수일 필요는 없다. 1const int a; // Error! 초기화 하지않아서 에러 발생 2 3const int b = 10; // 변수 b의 상수화 4b = 20; // Error! 상수의 변경 불가 5 6int c = 10; 7const int* d = &c; // 포인터의 상수화 8*d = 50; // Error! ...

모던 c++ 문법

2023년 6월 16일
c++11, c++14, c++17

문자열 리터럴 # Raw 문자열 리터럴 # 지원: c++11 기존 문자열은 “…” 로 감싸고 내부의 특수문자를 이스케이핑 처리해줘야 하지만, R"(…)" 문자열은 이스케이핑 처리해줄 필요가 없는건 아니고 문자열을 닫는 )" 를 표시하기 위해서는 이스케이핑 처리해줘야 한다. 정규식 패턴을 표현할 때 유용하다. 1cout << R"(!@#$%^&*(\'"<>?:;)"; 2cout << LR"(!@#$%^&*(\'"<>?:;)"; // wchar_t를 의미하는 L 과 혼용 가능 유니코드 문자열 리터럴 # 지원: c++11 다국어 지원이나 특수문자 처리할때 유용하다. 1auto s0 = "hello"; // const char* 2auto s1 = u8"hello"; // const char* before C++20, encoded as UTF-8, 3 // const char8_t* in C++20 4auto s2 = L"hello"; // const wchar_t* 5auto s3 = u"hello"; // const char16_t*, encoded as UTF-16 6auto s4 = U"hello"; // const char32_t*, encoded as UTF-32 추가된 초기화 방식 # 지원: c++11 ...