👨🏻‍💻 programming/◽ c, c++

[c++17] 전문자를 위한 c++17 새로운 내용 북마크

핑크코냥 2024. 3. 11. 14:26
728x90

c++17에 추가된 문법을 도서 "전문가를 위한 C++17(개정4판)"에서 빠르게 찾기 위해서 정리해보았다. 

page  
58 중첩된 네임스페이스 (nested namespace)
61 std::byte
69 if문의 이니셜라이저(intializer : 초기자)
72 switch문의 이니셜라이저(intializer : 초기자)
81 구조적 바인딩(structured binding)
138 로우 레벨 숫자 변환
  #include <charconv>
140 std::string_view클래스
298 weak_ptr도 shared_ptr와 마찬가지로 C스타일 배열을 지원한다.
299 weak_from_this()
390 static 데이터 멤버를 inline으로 선언할 수 있다.
530 std::as_const() 헬퍼 메서드
  #include <utility>
  as_const(obj) == const_cast<const T&>(obj)
539 [[fallthrough]]
어트리뷰트 [[nodiscard]]
  [[maybe_unused]]
543 사용자 정의 리터널
  sv : std::string_view
546 __has_include("파일명")
  __has_include(<파일명>)
576 생성자에 대한 템플릿 매개변수 추론
741,990 <optional>
991 <variant>
994 <any>
741 파일시스템 <filesystem>
 
<filesystem>헤더 파일에 정의된 것들은 모두 std::filesystem 네임스페이스에 속한다.
755, 902 알고리즘 : sample()
  주어진 시퀀스에서 n개 원소를 무작위로 선택한다.
756, 906 for_each_n( )
 
for_each와 비슷하지만 주어진 시퀀스에서 첫 n개 원소만 처리한다.
907 exchange( )
 
지정한 값을 새 값으로 교체하고 기존 값을 리턴한다. <utility>헤더 파일에 정의돼 있다.
758, 917 clamp( )
759 수치연산 알고리즘
919 gcd( ) 최대 공약수
  lcm( ) 최소 공배수
920 exclusive_scan( )
  inclusive_scan( )
  transform_exclusive_scan( )
  transform_inclusive_scan( )
919 reduce( )
920 transform_reduce( )
788 전역함수 추가: 모든 컨테이너에 대해 호출 가능
  std::size( )
  std::empty( )
789 std::data( )
824 노드(node), 노드 핸들(node handle)
  node_type 타입 앨리어스
  노드 핸들을 컨테이너에 추가하는 insert()
839 컨테이너 멤버함수
  extract( )
  insert_or_assigb( )
  merge( )
  try_emplace( )
866 람다 캡쳐
 
[*this]: 현재 객체의 복제본을 캡쳐한다. 람다 표현식을 실행하는 시점에 객체가 살아 있지 않을 때 유용하다.
867 람다 표현식
 
constexptr 람다 표현식을 const로 지정한다. 그러면 컴파일 시간에 평가된다.
880 not_fn
883 invoke( ) <functional>
889 특수 탐색 알고리즘 <functional>
 
search( ) 알고리즘에 원하는 탐색 알고리즘을 지정할 수 있도록 매개변수가 추가됐다.
  default_searcher
  boyer_moore_searcher
  boyer_moore_horspool_searcher
917 병렬 알고리즘
978 time_point에 연산 추가
  floor( )
  ceil( )
  round( )
1002 make_from_tuple
  std::make_from_tuple<T>(tuple)
 
T타입의 생성자에 tuple의 원소를 인수로 전달해서 T객체를 만든다.
1003 std::apply( )
1013 다형 메모리 할당자(polymorphic memory allocator)
1080 template에서 class 대신 typename 키워드를 사용할수 있다.
1103 폴딩 표현식(folding expression)
1111 constexpr if
  런타임이 아닌 컴파일 시간에 수행된다.
  조건을 만족하지 않으면 컴파일되지 않는다.
1116
value멤버가 있는 트레이트마다 트리에트 이름 뒤에 _v가 붙은 가변 템플릿이 추가됐다.
  some_trait_v<T>
  is_intergral_b<T>
  is_const_v<T>
1156 std::scoped_lock <mutex>
 
lock_guard와 비슷하지만 뮤텍스를 지정하는 인수 개수에 제한이 없다.
728x90