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!
...
람다 vs 클로저? # c++11 부터 지원하는 람다 식은 말그대로 표현식이며 소스코드 상에서만 존재하고 컴파일 이후 익명함수 객체(클로저)를 생성하는 식을 의미한다.
1auto f = [&](int x, int y) { return fudgeFactor * (x + y); }; 여기서 = 오른쪽에 있는 식이 람다식이며 컴파일 이후에는 클로저로 변한다. f는 클로저가 아닌 클로저의 복사본이며 식의 끝줄에서 파괴된다.
보통 람다식은 함수의 인자로 사용될 함수 객체를 간단하게 정의하기 위해 사용된다.
람다 표현식 구조 # 1.
...
문자열 리터럴 # 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
...