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 중국어 웹사이트의 기타 관련 기사를 참조하세요!