C ++ 17은 이제 완전한 기능이므로 큰 변화를 경험할 것 같지 않습니다. C ++ 17에 대한 수백 개의 제안이 제시되었습니다.
C ++ 17에서 C ++에 추가 된 기능은 무엇입니까?
"C ++ 1z"를 지원하는 C ++ 컴파일러를 사용할 때 컴파일러가 C ++ 17로 업데이트 할 때 어떤 기능을 사용할 수 있습니까?
C ++ 17은 이제 완전한 기능이므로 큰 변화를 경험할 것 같지 않습니다. C ++ 17에 대한 수백 개의 제안이 제시되었습니다.
C ++ 17에서 C ++에 추가 된 기능은 무엇입니까?
"C ++ 1z"를 지원하는 C ++ 컴파일러를 사용할 때 컴파일러가 C ++ 17로 업데이트 할 때 어떤 기능을 사용할 수 있습니까?
답변:
[*this]{ std::cout << could << " be " << useful << '\n'; }
컴파일러는 이제 인식하지 못하는 비표준 속성을 무시해야합니다 .
static_assert(expression);
문자열이없는 단순
전혀 throw
하지 않는 한throw()
, 그리고 throw()
이다 noexcept(true)
.
std::tie
와auto
const auto [it, inserted] = map.insert( {"foo", bar} );
it
및 inserted
으로부터 유추 유형을 pair
이 map::insert
돌아갑니다.std::array
유사 및 비교적 평평한 구조체 와 함께 작동if (init; condition)
과 switch (init; condition)
if (const auto [it, inserted] = map.insert( {"foo", bar} ); inserted)
if(decl)
경우로 확장합니다 decl
.일부 수정 사항이있는 (일부) 표현식에 대한 고정 평가 순서
.then
향후 작업을 수행합니다.순방향 진행 보증 (FPG) ( 병렬 알고리즘을위한 FPG )
u8'U', u8'T', u8'F', u8'8'
문자 리터럴 (문자열이 이미 존재 함)
std::string
참조-문자 배열 또는 부분 문자열과 유사string const&
다시는 가져 가지 마십시오 . 또한 bajillion 시간을 더 빨리 구문 분석 할 수 있습니다."hello world"sv
char_traits
std::byte
그들이 씹을 수있는 것보다 더 많이
std::invoke
std::apply
std::make_from_tuple
, std::apply
객체 구성에 적용
is_invocable
, is_invocable_r
,invoke_result
result_of
is_invocable<Foo(Args...), R>
"당신이 호출 할 수 있습니다 Foo
와 Args...
와와 호환 뭔가를 얻을 R
"여기서 R=void
기본값입니다.invoke_result<Foo, Args...>
이다 std::result_of_t<Foo(Args...)>
하지만 분명히 덜 혼란?for_each_n
reduce
transform_reduce
exclusive_scan
inclusive_scan
transform_exclusive_scan
transform_inclusive_scan
스레드 사용을 위해 추가되었으며 스레드를 사용하지 않더라도 노출됩니다.
atomic<T>
::is_always_lockfree
std::lock
한 번에 둘 이상의 뮤텍스를 잠글 때 약간의 고통을 덜어줍니다.std
알고리즘 및 관련 기계[func.searchers]
과 [alg.search]
std::function
자std::sample
, 범위에서 샘플링?
try_emplace
과 insert_or_assign
접합을위한 map<>
, unordered_map<>
, set<>
, 및unordered_set<>
.data()
문자열이 아닌 상수 입니다.
비회원 std::size
, std::empty
,std::data
std::begin
/ 처럼end
emplace
기능의 제품군은 이제 생성 된 객체에 대한 참조를 반환합니다 .
unique_ptr<T[]>
수정 및 기타 unique_ptr
조정.weak_from_this
그리고 일부는 이것에서 공유되도록 고정되었습니다.std
데이터 유형 개선 :{}
건설 std::tuple
및 기타 개선C ++ 17 라이브러리는 C99 대신 C11을 기반으로합니다.
향후 표준 라이브러리를std[0-9]+
위해 예약 됨
std
구현 에서 이미 노출 된 유틸리티 코드std::clamp()
std::clamp( a, b, c ) == std::max( b, std::min( a, c ) )
대충gcd
과 lcm
std::uncaught_exceptions
std::as_const
std::bool_constant
_v
템플릿 변수 의 전체 무리std::void_t<T>
std::owner_less<void>
std::less<void>
,하지만 내용에 따라 종류의 스마트 포인터에 대한std::chrono
광택std::conjunction
, std::disjunction
,std::negation
노출std::not_fn
std
std::less
. <codecvt>
memory_order_consume
result_of
으로 교체 invoke_result
shared_ptr::unique
스레드 안전하지 않습니다.Isocpp.org는 C ++ 14 이후 독립적 인 변경 목록을 가지고 있습니다. 그것은 부분적으로 약탈되었습니다.
당연히 TS 작업은 병행하여 계속 진행되므로 다음 반복을 기다려야하는 불확실한 일부 TS가 있습니다. 다음 반복의 목표는 일부 소문이 암시하는 것처럼 C ++ 19가 아니라 이전에 계획된 C ++ 20입니다. C ++ 1O는 피했다.
이 reddit post 및 이 reddit post 에서 가져온 초기 목록 ( googling 또는 위의 isocpp.org 페이지에서 추가 된 링크 포함).
SD-6 기능 테스트 목록 에서 추가 항목이 제거되었습니다 .
clang의 기능 목록 및 라이브러리 기능 목록 은 다음에 약화됩니다. C ++ 17이 아니라 C ++ 1z이므로 신뢰할 수없는 것 같습니다.
이 슬라이드 에는 다른 기능이 누락되었습니다.
"제거 된 내용"은 묻지 않았지만 C ++ 17에서 C ++로 제거 된 몇 가지 (대부분 이전에 더 이상 사용되지 않음) 목록은 다음과 같습니다.
register
, 향후 사용을 위해 예약 된 키워드bool b; ++b;
<functional>
것들,random_shuffle
std::function
다시 말해서 이것이 코드에 영향을 주거나 표준에서 정리되었는지 확실하지 않습니다.
P0505R0 (constexpr 크로노)
P0418R2 (원자 조정)
P0512R0 (템플릿 인수 공제 조정)
P0490R0 (구조적 바인딩 조정)
P0513R0 (로 변경 std::hash
)
P0502R0 (병렬 예외)
P0509R1 (예외 처리에 대한 제한 사항 업데이트)
P0012R1 (예외 사양을 유형 시스템의 일부로 설정)
P0510R0 (변형에 대한 제한 사항)
P0504R0 (선택 / 변형 / 모든 태그)
P0497R0 (공유 ptr 조정)
P0508R0 (구조적 바인딩 노드 핸들)
P0521R0 (공유 포인터 사용 횟수 및 고유 한 변경?)
https://isocpp.org/files/papers/p0636r0.html
memory_order_consume
공식적으로 더 이상 사용되지 않는 것 같습니다. 그것은 메모에서 권장하지 않습니다. 어쩌면 이것을 언급하는 것이 합리적입니까?