>백엔드 개발 >C++ >C 17에 도입된 주요 언어 기능, 라이브러리 추가 및 더 이상 사용되지 않는 요소는 무엇입니까?

C 17에 도입된 주요 언어 기능, 라이브러리 추가 및 더 이상 사용되지 않는 요소는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-08 11:10:19498검색

What are the key language features, library additions, and deprecated elements introduced in C  17?

C 17 기능

C 17은 언어에 풍부하고 새로운 기능을 도입하여 기능을 크게 확장하고 유용성을 향상시킵니다. 이러한 추가 사항에는 템플릿 개선 및 람다 개선부터 라이브러리 추가 및 사용되지 않는 요소에 이르기까지 언어의 다양한 측면이 포함됩니다.

언어 기능

템플릿 및 일반 코드:

  • 클래스에 대한 템플릿 인수 추론 템플릿: 생성자는 이제 함수와 유사하게 템플릿 인수를 추론할 수 있습니다.
  • 템플릿 인수: 비유형 템플릿 인수 유형의 값을 나타냅니다.
  • 비유형 템플릿 인수 수정: 비유형 템플릿에 대한 몇 가지 수정 및 개정이 이루어졌습니다. 인수.

Lambda:

  • Constexpr Lambdas: 이제 Lambdas가 특정 요구 사항을 충족하는 경우 명시적으로 constexpr로 표시될 수 있습니다. .
  • 이것을 캡처 람다: 이제 람다는 this 포인터를 캡처하여 멤버 변수 및 메서드에 액세스할 수 있습니다.

속성:

  • 새로운 속성: [[fallthrough]], [[nodiscard]] 및 코드 명확성과 가독성을 높이기 위해 [[maybe_unused]]가 도입되었습니다.
  • 네임스페이스 및 열거자의 특성: 이제 [[attributes]]를 사용하여 네임스페이스 및 열거자에 특성을 적용할 수 있습니다.

구문 정리:

  • 인라인 변수: 이제 변수를 인라인으로 선언할 수 있으므로 컴파일러가 정의를 인라인할 수 있습니다.
  • 간소화된 네임스페이스 선언 : 간결한 네임스페이스를 위해 네임스페이스 A::B 구문이 도입되었습니다. 선언.
  • 단순화된 static_assert: 이제 문자열 인수 없이 static_assert 문을 사용할 수 있습니다.

클린 다중 반환 및 흐름 제어:

  • 구조적 바인딩: 구조적 바인딩을 사용하면 선언에서 튜플 및 기타 데이터 구조를 더 편리하게 언패킹할 수 있습니다.
  • 초기화를 사용한 조건문: if (init; 조건) 및 스위치(init; 조건)는 조건문에서 더 많은 유연성을 제공합니다.
  • 범위 기반 For 루프 일반화: 범위 기반 for 루프는 이제 다음과 다른 센티넬(끝 반복자)을 지원합니다. 시작 반복자.
  • if constexpr: if constexpr이 다음을 기반으로 조건부 컴파일을 허용하는 경우 컴파일 타임 상수.

기타:

  • 16진수 부동 소수점 리터럴: 이제 부동 소수점 리터럴을 16진수 형식으로 표현할 수 있습니다.
  • 과도하게 정렬된 데이터에 대한 동적 메모리 할당: 과다 정렬된 동적 메모리 할당에 대한 지원이 향상되었습니다. data.
  • 복사 제거 보장: 복사 제거가 보장되지 않은 특정 시나리오는 이제 명시적으로 보장됩니다.
  • 향상된 평가 순서: 특정 표현식에 대한 평가 순서 규칙이 보다 명확하게 수정되었습니다. 동작.

라이브러리 추가

데이터 유형:

  • std::variant: 다형성 여러 대안 중 하나의 값을 보유할 수 있는 유형 유형.
  • std::ional: 값을 포함하거나 포함하지 않을 수 있는 선택적 값을 나타냅니다.
  • std::any: A 임의의 값을 담을 수 있는 유형 삭제 컨테이너 type.
  • std::string_view: const char*와 유사한 문자 시퀀스에 대한 참조입니다.
  • std::byte: A raw를 표현하는 타입 bytes.

Utilities:

  • std::invoke: 주어진 인수로 콜러블을 호출하여 다양한 유형을 지원합니다. callables.
  • std::apply: 튜플의 압축을 풀고 해당 요소를 콜러블에 인수로 전달합니다.
  • std::invoke_result 및 관련 개념: 주어진 콜러블 호출의 유효성과 결과를 결정하기 위한 개념과 유형 인수.

파일 시스템 라이브러리(TS v1):

  • 파일 시스템, 디렉터리 및 파일 작업을 위한 클래스 및 함수.

신규 알고리즘:

  • for_each_n
  • reduce
  • transform_reduce
  • exclusive_scan
  • inclusive_scan
  • transform_exclusive_scan
  • transform_inclusive_scan

스레딩:

  • std::shared_mutex: 여러 판독기를 허용하지만 작성자는 하나만 허용하는 공유 뮤텍스입니다.
  • atomic::is_always_lockfree: 모든 경우에 원자 유형이 잠금 해제되는지 여부를 나타냅니다.
  • scoped_lock:: 여러 뮤텍스를 잠급니다. 동시에 잠금 및 잠금 해제를 단순화합니다.

(일부) Library Fundamentals Library(TS v1):

  • 검색 수행 및 다형성 작업을 위한 기능 할당자.

컨테이너 개선 사항:

  • try_emplace 및 insert_or_sign: 특정 시나리오를 처리하기 위한 향상된 컨테이너 삽입 방법.
  • 컨테이너 접합: 효율적 노드 간 이동 컨테이너.

스마트 포인터 변경 사항:

  • std::unique_ptr 및 기타 스마트 포인터에 대한 수정 및 조정.

추가 개선 사항:

  • 간편하게 복사 가능 std::reference_wrapper: 특정 경우의 성능이 향상됩니다.
  • 업데이트된 C11 라이브러리: C 17 표준 라이브러리는 C11을 기반으로 합니다. , 최신 버전과의 호환성 제공
  • 더 이상 사용되지 않는 요소: 이전 C 표준 버전의 다양한 요소가 더 이상 사용되지 않습니다.

C 1z의 기능(C 17에서 예상됨)* *

C 1z 작업 초안의 어떤 기능을 C에서 사용할 수 있는지 확인하려면 17 컴파일러의 경우 개별 컴파일러의 문서 및 릴리스 노트를 참조하는 것이 좋습니다. C 1z의 모든 기능이 모든 C 17 컴파일러에서 반드시 구현되는 것은 아닙니다.

이 요약에 모든 변경 사항이나 기능이 언급되지는 않았습니다. 전체 목록을 보려면 C 17 표준 문서나 기타 평판이 좋은 소스를 참조하세요.

위 내용은 C 17에 도입된 주요 언어 기능, 라이브러리 추가 및 더 이상 사용되지 않는 요소는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.