deulee의 개발 노트

고정 헤더 영역

글 제목

메뉴 레이어

deulee의 개발 노트

메뉴 리스트

  • 홈
  • 태그
  • 방명록
  • 분류 전체보기 (112)
    • C++ (79)
      • C++98 (36)
      • Modern C++(11, 14, 17, 20) (34)
      • C++ STL (9)
    • 데이터베이스 (0)
    • 컴퓨터 구조 (0)
    • 운영체제 (0)
    • 읽은 책 (0)
    • 네트워크 (0)
    • 알고리즘 (31)
      • 이론 (5)
      • 문제 (26)
    • 잡글 (1)
      • 아이디어 (0)
      • 해야할 것 (0)
      • 목표 (0)
      • 정보글 (1)
    • git (0)

검색 레이어

deulee의 개발 노트

검색 영역

컨텐츠 검색

C++

  • [C++11 - library features] std::begin/end

    2023.08.28 by deulee

  • [C++11] Move Semantics

    2023.08.28 by deulee

  • [C++11] Rvalue references

    2023.08.28 by deulee

  • [C++11] Forwarding References(Universal References)

    2023.08.28 by deulee

  • [C++11] Variadic templates

    2023.08.28 by deulee

  • [C++11] Initializer lists

    2023.08.28 by deulee

  • [C++11] Static Assertions

    2023.08.26 by deulee

  • [C++11] auto

    2023.08.26 by deulee

[C++11 - library features] std::begin/end

`std::begin`과 `std::end`는 C++11에서 도입된 컨테이너의 일반적인 `begin`과 `end` 반복자를 반환해주는 기능이다. 이들의 특징은 특정 클래스의 멤버 함수로써 존재하는 것이 아니라 "raw array"와 같이 `begin`과 `end` 멤버 함수가 없는 배열에도 유용하게 사용된다는 것이다. #include #include #include template int CountTwos(const T& container) { return std::count_if(std::begin(container), std::end(container), [](int item){ return item == 2; }); } int main(void) { std::vector vec = {2, 2, 43..

C++/Modern C++(11, 14, 17, 20) 2023. 8. 28. 16:30

[C++11] Move Semantics

"Move Semantics(이동 의미론)"은 C++11로부터 도입된 핵심적인 개념으로, 객체의 "소유권"을 전환하거나 "전달"하는 방식을 나타낸다. 이는 C++에서 더 효율적인 객체 복사와 동적 자원 관리를 가능하게 해준다. "Move Semantics"를 이용하면 임시 객체나 rvalue로부터 객체의 리소스를 효율적으로 이동시켜 새로운 객체를 생성하거나 기존 객체에 리소스를 할당할 수 있다. 이를 통해 복사 대신 리소스의 소유권을 이전함으로써 성능을 최적화시킬 수 있다. 특히, 동적 메모리 할당과 같이 무거운 작업에서 효율적이다. 그럼 주로 어디에서 사용할까? 객체의 수명이 다할때 객체가 일시적으로 사용될 때 `std::move`로 인해 명시적으로 호출될 때 보통 이 세 가지 상황에서 사용되는데 다음..

C++/Modern C++(11, 14, 17, 20) 2023. 8. 28. 16:13

[C++11] Rvalue references

"Rvalue reference"는 C++11에서 도입된 기능으로 오로지 Rvalue에만 할당될 수 있는 새로운 레퍼런스이다. 이를 선언하는 방법은 다음과 같다. T&& // where T is non-template type parameter (such as int, or a user-defined type) 그럼 "Rvalue reference"가 어떻게 바인딩되는지 확인해보자. #include int main(void) { int x = 0; // `x` is an lvalue of type `int` int& xl = x; // `x1` is an lvalue of type `int&` int&& xr = x; // error -- `x` is an lvalue int&& xr2 = 0; // `..

C++/Modern C++(11, 14, 17, 20) 2023. 8. 28. 15:54

[C++11] Forwarding References(Universal References)

"Forwarding References" 혹은 "Universal References"은 C++11에서 도입된 기능으로, 주로 함수 템플릿의 매개변수로 사용되는 형태를 가리키는 용어다. 함수 템플릿으로 전달된 인자를 "원본의 값 카테고리와 레퍼런스 유형을 유지하면서 다른 함수로 전달하는 메커니즘"을 일컷는다. C++에는 Lvalue와 Rvalue이라는 값 카테고리가 있는데 주요 특징은 다음과 같다. Lvalue : 주소를 가질 수 있는 변수나 객체를 의미함. (변수, 포인터) Rvalue : 주소를 가질 수 없는 일시적인 값. (정수 리터럴) 이때 "Forwarding References"는 이러한 값 카테고리를 유지하면서 인자를 전달하는데 사용된다. Forwarding Reference의 생성 방법은..

C++/Modern C++(11, 14, 17, 20) 2023. 8. 28. 15:26

[C++11] Variadic templates

`...` 구문은 가변 인자를 받을 수 있게 된다. 가변 템플릿은 템플릿의 매개 변수로 여러 개의 인자를 받을 수 있도록 하는 기능이다. 이는 함수나 클래스 템플릿을 정의할 때, 인자의 개수가 동적으로 변할 수 있을 때 유용하게 사용된다. 이때, 인자의 갯수는 0개 이상을 받을 수 있다. 이렇게 최소 한개 이상의 가변 인자를 받는 템플릿을 "가변 템플릿"이라고 한다. #include template struct Arity { constexpr static int value = sizeof...(T); }; int main(void) { static_assert(Arity::value == 0, ""); // OK static_assert(Arity::value == 3, ""); // OK return ..

C++/Modern C++(11, 14, 17, 20) 2023. 8. 28. 14:57

[C++11] Initializer lists

"Initializer lists"는 C++11에서 도입된 객체를 초기화하는 데 사용되는 편리한 방법이다. 이는 "braced list(중괄호)"를 이용하여 만들 수 있는데 예를 들어 `{1, 2, 3}`은 정수의 배열을 만든다. 그리고 이 타입은 `std::initializer_list`가 된다. 이는 함수에 인자로 넘길 때 벡터 대신 사용하기 유용하다. #include int sum(const std::initializer_list& list) { int total = 0; for (auto& it : list) total += it; return total; } int main(void) { auto list = {1, 2, 3}; // `std::initializer_list` sum(list);..

C++/Modern C++(11, 14, 17, 20) 2023. 8. 28. 13:56

[C++11] Static Assertions

`static_assert`는 C++11부터 제공되는 기능으로 컴파일 시간에 조건을 검사하여 컴파일 타임 에러를 발생시키는 역할을 수행하는 키워드이다. 이를 통해 컴파일 시간에 논리적인 조건을 확인하거나 특정한 제약을 검사하여 코드의 안전성을 높일 수 있다. `static_assert`의 기본 구조는 다음과 같다. static_assert(condition, message); `condition`: 검사하고 싶은 조건을 나타내는 표현식. 만약 이 조건이 `false`로 판단되면 컴파일 에러 발생 `message`: 컴파일 에러 메시지를 지정 예시: #include #include template void print_Int() { static_assert(std::is_integral::value, "T ..

C++/Modern C++(11, 14, 17, 20) 2023. 8. 26. 18:32

[C++11] auto

`auto` 키워드는 C++11부터 도입된 기능으로, 변수의 타입을 "컴파일러"가 초기화식을 기반으로 자동으로 추론하도록 하는 기능을 제공한다. 예시를 먼저 보도록 하자. #include int main(void) { auto a = 3.14; // double auto b = 1; // int auto& c = b; // int& auto d = {0}; // std::initializer_list auto&& e = 1; // int&& auto&& f = b; // int& auto g = new auto(123); // int* const auto h = 1; // const int auto i = 1, j = 2, k = 3; // int, int, int auto l = 1, m = true,..

C++/Modern C++(11, 14, 17, 20) 2023. 8. 26. 18:12

추가 정보

인기글

최신글

페이징

이전
1 2 3 4 ··· 10
다음
TISTORY
deulee의 개발 노트 © Magazine Lab
페이스북 트위터 인스타그램 유투브 메일

티스토리툴바