Development Tip

C ++ 17의 새로운 기능은 무엇입니까?

yourdevel 2020. 9. 27. 14:11
반응형

C ++ 17의 새로운 기능은 무엇입니까?


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

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

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


언어 기능 :

템플릿 및 일반 코드

람다

속성

구문 정리

더 깨끗한 다중 리턴 및 흐름 제어

  • 구조화 된 바인딩

    • 기본적으로, 일류 std::tieauto
    • 예:
      • const auto [it, inserted] = map.insert( {"foo", bar} );
      • 변수 작성 itinserted으로부터 유추 유형을 pairmap::insert돌아갑니다.
    • tuple / pair-likes & std::arrays 및 상대적으로 평평한 구조체 와 함께 작동 합니다.
    • 표준에서 실제로 명명 된 구조화 된 바인딩
  • if (init; condition)switch (init; condition)

    • if (const auto [it, inserted] = map.insert( {"foo", bar} ); inserted)
    • 현명하게 bool로 변환 할 수없는 if(decl)경우로 확장합니다 decl.
  • 범위 기반 for 루프 일반화

    • 주로 센티널 또는 시작 반복기와 동일한 유형이 아닌 종료 반복기를 지원하는 것으로 보이며, 이는 널 종료 루프 등에 도움이됩니다.
  • constexpr 인 경우

    • 거의 일반적인 코드를 단순화하기 위해 많이 요청 된 기능입니다.

기타

라이브러리 추가 :

데이터 유형

  • 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

New algorithms

  • for_each_n

  • reduce

  • transform_reduce

  • exclusive_scan

  • inclusive_scan

  • transform_exclusive_scan

  • transform_inclusive_scan

  • Added for threading purposes, exposed even if you aren't using them threaded

Threading

(parts of) Library Fundamentals TS v1 not covered above or below

Container Improvements

Smart pointer changes

Other std datatype improvements:

Misc

Traits

Deprecated

Isocpp.org has has an independent list of changes since C++14; it has been partly pillaged.

Naturally TS work continues in parallel, so there are some TS that are not-quite-ripe that will have to wait for the next iteration. The target for the next iteration is C++20 as previously planned, not C++19 as some rumors implied. C++1O has been avoided.

Initial list taken from this reddit post and this reddit post, with links added via googling or from the above isocpp.org page.

Additional entries pillaged from SD-6 feature-test list.

clang's feature list and library feature list are next to be pillaged. This doesn't seem to be reliable, as it is C++1z, not C++17.

these slides had some features missing elsewhere.

While "what was removed" was not asked, here is a short list of a few things ((mostly?) previous deprecated) that are removed in C++17 from C++:

Removed:

There were rewordings. I am unsure if these have any impact on code, or if they are just cleanups in the standard:

Papers not yet integrated into above:

  • P0505R0 (constexpr chrono)

  • P0418R2 (atomic tweaks)

  • P0512R0 (template argument deduction tweaks)

  • P0490R0 (structured binding tweaks)

  • P0513R0 (changes to std::hash)

  • P0502R0 (parallel exceptions)

  • P0509R1 (updating restrictions on exception handling)

  • P0012R1 (make exception specifications be part of the type system)

  • P0510R0 (restrictions on variants)

  • P0504R0 (tags for optional/variant/any)

  • P0497R0 (shared ptr tweaks)

  • P0508R0 (structured bindings node handles)

  • P0521R0 (shared pointer use count and unique changes?)

Spec changes:

Further reference:

참고URL : https://stackoverflow.com/questions/38060436/what-are-the-new-features-in-c17

반응형