본문 바로가기

C++/C++148

C++14 : 애그리게이트 멤버 초기화(Aggregate member initialization) C++11에는 생성자가 멤버 자체를 초기화하지 않은 경우 클래스 범위에서 멤버에 적용할 표현식인 멤버 이니셜라이저가 추가되었다. 멤버 이니셜라이저가 있는 클래스를 명시적으로 제외하도록 집계 정의가 변경되었다. 따라서 집계 초기화(aggregate initialization)를 사용할 수 없다. C++14는 이러한 제한을 완하하여 이러한 타입에 대한 집계 초기화를 허용한다. 중괄호 초기화 목록이 해당 인수에 대한 값을 제공하지 않으면 멤버 이니셜라이저가 이를 처리한다. 데이터 멤버는 기본적으로 초기화되지 않는다. 일반 변수와 마찬가지로 데이터 멤버는 기본적으로 초기화 되지 않는다. 아래 구조체 예제를 살펴보자. #include struct Employee { int id; // note: no initia.. 2022. 4. 15.
C++14 : 변수 템플릿(Variable templates) 이전 버전의 C++에서는 함수, 클래스 또는 타입 별칭만 템플릿화 할 수 있었다. C++14에서는 템플릿화된 변수를 생성할 수 있다. 아래 예제는 다양한 타입에 대한 pi값을 얻기 위해 읽을 수 있는 변수 pi이다 (예: 정수 유형으로 읽을 때 3, float, double, long double, etc로 읽을 때 가장 가까운 값을 얻을 수 있음) 템플릿의 일반적인 규칙은 전문화(specialization)를 포함하여 이러한 선언 및 정의에 적용된다. template constexpr T pi = T(3.141592653589793238462643383); // Usual specialization rules apply: template constexpr const char* pi = "pi"; 변수 .. 2022. 4. 15.
C++14 : 완화된 constexpr 제약 (Relaxed constexpr restrictions) 완화된 constexpr 제약 (Relaxed constexpr restrictions) 먼저 constexpr은 C++11에 추가된 기능이다. 주요 아이디어는 런타임이 아닌 컴파일 시간에 계산을 수행하여 프로그램의 성능을 향상시키는 것이다. 개발자가 프로그램을 컴파일하고 완료하면 사용자가 여러 번 실행한다는 점에 주목하자. 아이디어는 컴파일 시간을 보내고 런타임에 시간을 절약하는 것이다. (템플릿 메타프로그래밍과 유사) constexpr은 객체 또는 함수의 값이 컴파일 타임에 평가될 수 있고 표현식이 다른 상수 표현식에서 사용될 수 있음을 지정한다. 예를 들어 아래 코드에서 product()는 컴파일 시간에 평가된다. // constexpr function for product of two number.. 2022. 4. 15.
C++14 : 함수 반환 타입 추론(Function return type deduction), 선언 시 대체 형 추론(Alternate type deduction on declaration) 함수 반환 타입 추론(Function return type deduction) c++14에서 함수의 반환 값으로 auto를 사용하면 컴파일러는 자동으로 반환 형을 추론하려고 시도한다. // C++14 program to illustrate the // return type deduction #include using namespace std; // Function to multiply the two // numbers a and b auto multiply(int a, int b) { // Return the product return a * b; } // Driver Code int main() { int a = 4, b = 5; // Function Call cout 2022. 4. 15.
300x250