프로그래밍 언어/C++

C ++ 17의 새로운 기능

Rateye 2021. 7. 27. 12:13
728x90
반응형
질문 : C ++ 17의 새로운 기능은 무엇입니까?

C ++ 17은 이제 기능이 완전하므로 큰 변화가 없을 것입니다. C ++ 17에 대한 수백 개의 제안이 제출되었습니다.

C ++ 17에서 C ++에 추가 된 기능은 무엇입니까?

"C ++ 1z"를 지원하는 C ++ 컴파일러를 사용할 때 컴파일러가 C ++ 17로 업데이트 할 때 사용할 수있는 기능은 무엇입니까?

반응형
답변

언어 기능:

템플릿 및 일반 코드:

 

람다:

 

속성:

구문 정리:

 

Cleaner multi-return 및 flow control

  • 구조화 된 바인딩
    • 기본적으로 일류 std::tie with auto
    • 예:
      • const auto [it, inserted] = map.insert( {"foo", bar} );
      • 변수 작성 itinserted 으로부터 유추 유형 pairmap::insert 돌아갑니다.
    • tuple / pair-likes 및 std::array 및 비교적 평평한 구조체와 함께 작동합니다.
    • 표준에서 실제로 명명 된 구조화 된 바인딩
  • if (init; condition)switch (init; condition)
    • if (const auto [it, inserted] = map.insert( {"foo", bar} ); inserted)
    • if(decl) decl 이 현명하게 bool로 변환 할 수없는 경우로 확장합니다.
  • 범위 기반 for 루프 일반화
    • 대부분 센티널 또는 시작 반복기와 동일한 유형이 아닌 종료 반복기를 지원하는 것으로 보이며, 이는 널 종료 루프 등에 도움이됩니다.
  • constexpr 인 경우
    • 거의 일반적인 코드를 단순화하기 위해 많이 요청 된 기능입니다.

 

Misc

 

라이브러리 추가 사항:

데이터 타입:

  • std::variant<Ts...>
    • 마지막으로 확인한 거의 항상 비어 있지 않습니까?
    • 태그가 지정된 유니온 유형
    • {굉장한 | 유용한}
  • std::optional
    • 어쩌면 뭔가를 들고
    • 엄청나게 유용함
  • std::any
    • (복사 가능) 무엇이든 보유
  • std::string_view
    • 참조-문자 배열 또는 하위 std::string
    • 다시 string const& 하지 마십시오. 또한 파싱을 bajillion 배 더 빠르게 만들 수 있습니다.
    • "hello world"sv
    • constexpr char_traits
  • std::byte 는 씹을 수있는 것보다 더 많이 떨어집니다.
    • 정수도 문자도 아닌 데이터 만

 

내용 호출:

File System TS v1

 

새로운 알고리즘

  • for_each_n
  • reduce
  • transform_reduce
  • exclusive_scan
  • inclusive_scan
  • transform_exclusive_scan
  • transform_inclusive_scan
  • 스레딩 목적으로 추가되며 스레드를 사용하지 않는 경우에도 노출됩니다.

 

스레딩

 

(일부)Library Fundamentals TS v1라이브러리 기본 TS v1에서 위 또는 아래에 다루지 않음

컨테이너 개선사항

 

스마트 포인터 변경

기타 표준 데이터 유형 개선::

Misc

 

특성들

사용되지 않음

Isocpp.org에는 C ++ 14 이후의 독립적 인 변경 목록이 있습니다. 부분적으로 약탈당했습니다.

당연히 TS 작업은 병렬로 계속되므로 다음 반복을 기다려야하는 완전히 잘 익은 TS가 없습니다. 다음 반복의 대상은 이전에 계획 한대로 C ++ 20이며 일부 루머가 암시하는 것처럼 C ++ 19가 아닙니다. C ++ 1O는 피했습니다.

이 reddit 게시물이 reddit 게시물 에서 가져온 초기 목록, 인터넷 검색을 통해 추가 된 링크 또는 위의 isocpp.org 페이지.

SD-6 기능 테스트 목록에서 추가 항목이 삭제되었습니다.

clang의 기능 목록라이브러리 기능 목록 이 다음으로 약탈됩니다. 이것은 C ++ 17이 아니라 C ++ 1z이기 때문에 신뢰할 수없는 것 같습니다.

이 슬라이드 에는 다른 곳에서 누락 된 일부 기능이 있습니다.

"무엇이 제거되었는지"는 묻지 않았지만 다음은 C ++ 17에서 C ++에서 제거 된 몇 가지 항목 ((대부분?) 이전에 사용되지 않음)에 대한 간단한 목록입니다.

제거됨:

단어 변경이있었습니다. 이것이 코드에 어떤 영향을 미치는지 또는 표준에서 정리 된 것인지 확실하지 않습니다.

위와 아직 통합되지 않은 논문:

  • P0505R0 (constexpr chrono)
  • P0418R2 (원자 조정)
  • P0512R0 (템플릿 인수 추론 조정)
  • P0490R0 (구조화 된 바인딩 조정)
  • P0513R0 ( std::hash 변경)
  • P0502R0 (병렬 예외)
  • P0509R1 (예외 처리에 대한 제한 업데이트)
  • P0012R1 (예외 사양을 유형 시스템의 일부로 설정)
  • P0510R0 (변형 제한)
  • P0504R0 (옵션 / 변형 / 모든 태그)
  • P0497R0 (공유 ptr 조정)
  • P0508R0 (구조화 된 바인딩 노드 핸들)
  • P0521R0 (공유 포인터 사용 횟수 및 고유 변경?)

 

사양 변경 사항:

추가 참조:

 

출처 : https://stackoverflow.com/questions/38060436/what-are-the-new-features-in-c17
728x90
반응형