본문 바로가기

C++16

C++14 : 제네릭 람다(Generic lambdas) C++11에서 람다 함수 매개변수는 구체적인 타입으로 선언해야 한다. C++14에서는 이 요구 사항을 완화하여 람다 함수 매개 변수를 auto 타입 지정자로 선언할 수 있다. auto lambda = [](auto x, auto y) {return x + y;}; auto 타입 추론과 관련하여 generic 람다는 템플릿 인수 추론 규칙을 따른다. (비슷하지만 모든 면에서 동일하지 않음) 위의 lambda의 변환 함수 동작은 아래 변환 함수 동작과 같다. struct { template auto operator()(T x, U y) const {return x + y;} } lambda{}; C++ 람다 표현식에 대해 자세히 알고 싶으면 아래 사이트를 참고하면 된다. https://www.geeksfor.. 2022. 4. 15.
C++14 : 숫자 구분자(Digit separators) C++14에서 작은따옴표 문자(')는 정수 리터럴과 부동 소수점 리터럴 모두 숫자 리터럴에서 숫자 구분 기호로 임의로 사용할 수 있다. 이것은 코드를 보는 사람들이 큰 숫자를 더 쉽게 알아차릴 수 있다. auto integer_literal = 1'000'000; auto floating_point_literal = 0.000'015'3; auto binary_literal = 0b0100'1100'0110; auto a_dozen_crores = 12'00'00'000; 때때로 숫자의 크기가 커지면 숫자를 읽기 어려워진다. 예를 들어 1000은 금방 눈에 들어오지만 더 많은 0이 추가되면 (예: 10000000) 이제 읽기가 조금 어려워지고 더 많은 0이 추가되면 어떻게 될까? 실생활에서는 쉼표(,)가.. 2022. 4. 15.
C++14 : 바이너리 리터럴(Binary literals) C++14의 숫자 리터럴은 이진 형식으로 지정할 수 있다. 구문은 접두사 0b 또는 0B를 사용한다. 구문은 다른 언어에서도 사용됩니다. Java, C#, Swift, Go, Scala, Ruby, Python, OCaml 및 최소 2007년 이후로 일부 C 컴파일러의 비공식 확장으로 사용되었다. 수학적 평가 또는 다양한 타입의 숫자를 포함하는 프로그램을 작성하는 동안 일반적으로 특정 접두사를 사용하여 각 숫자 타입을 지정하는 것을 좋아한다. 다음은 위에서 설명한 것의 예제 프로그램이다. // C++ program to illustrate the // Hexadecimal and Octal number // using literals #include using namespace std; // Driver.. 2022. 4. 15.
C++14 : 애그리게이트 멤버 초기화(Aggregate member initialization) C++11에는 생성자가 멤버 자체를 초기화하지 않은 경우 클래스 범위에서 멤버에 적용할 표현식인 멤버 이니셜라이저가 추가되었다. 멤버 이니셜라이저가 있는 클래스를 명시적으로 제외하도록 집계 정의가 변경되었다. 따라서 집계 초기화(aggregate initialization)를 사용할 수 없다. C++14는 이러한 제한을 완하하여 이러한 타입에 대한 집계 초기화를 허용한다. 중괄호 초기화 목록이 해당 인수에 대한 값을 제공하지 않으면 멤버 이니셜라이저가 이를 처리한다. 데이터 멤버는 기본적으로 초기화되지 않는다. 일반 변수와 마찬가지로 데이터 멤버는 기본적으로 초기화 되지 않는다. 아래 구조체 예제를 살펴보자. #include struct Employee { int id; // note: no initia.. 2022. 4. 15.
300x250