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++11] Delegating Constructors

    2023.08.25 by deulee

  • [C++11] User-defined literals

    2023.08.25 by deulee

  • [C++11] Explicit virtual overrides

    2023.08.25 by deulee

  • [C++11] Final specifier

    2023.08.24 by deulee

  • [C++11] Default functions

    2023.08.24 by deulee

  • [C++11] Deleted functions

    2023.08.24 by deulee

  • [C++11] Range-based for loops

    2023.08.24 by deulee

  • [C++11] Special member functions for move semantics

    2023.08.24 by deulee

[C++11] Delegating Constructors

"Delegating Constructors"는 C++11부터 지원되는 기능으로, 한 클래스의 생성자가 같은 클래스의 다른 생성자를 호출하여 초기화하는 기능을 가리킨다. #include class MyClass { private: int num; public: MyClass(int n) : num(n) { // 다른 초기화 작업 수행 std::cout

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

[C++11] User-defined literals

"User-defined literals"은 C++11로부터 도입된 기능으로, 사용자가 직접 정의한 리터럴 표기법을 만들 수 있게 해준다. 리터럴은 코드에서 값을 나타내는 "상수 표기법"을 의미한다. 예를 들어, 정수 리터럴은 `42`, 부동소수점 리터럴은 `3.14`와 같이 말이다. 사용자 정의 리터럴은 이와 비슷한 방식으로 작동하지만, 프로그래머가 정의한 리터럴 표기법을 사용하여 사용자 정의 타입에 대한 리터럴 값을 생성할 수 있다. 우선 다음 예시를 보도록 하자. #include class Time { private: unsigned int minutes; public: explicit Time(unsigned int min) : minutes(min) {} unsigned int getMinute..

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

[C++11] Explicit virtual overrides

C++11에선 명시적으로 가상 함수를 오버라이딩을 할 수 있다. 만약 가상 함수가 부모의 가상 함수를 오버라이딩 하지 않고 비가상 함수를 오버라이딩(재정의) 하는 경우 컴파일 단위에서 에러를 나타낼것이다. #include class A { public: virtual void foo() = 0; void bar(); }; class B : public A { public: void foo() override; // correct -- B::foo overrides A::foo void bar() override; // error -- A::bar is not virtual void baz() override; // error -- B::baz does not override A::baz }; 이로 인해서..

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

[C++11] Final specifier

`final` 지정자는 C++11로부터 도입된 키워드로, 클래스 멤버 함수나 가상 함수를 "오버라이드할 수 없도록" 지정하는 데 사용한다. 이를 통해 클래스의 무분별한 확장을 제어하고, 클래스 계층 구조에서 "특정 함수의 변경을 막을 수 있다". 그렇기 때문에 `final` 지정자는 주로 가상 함수와 함께 사용이 된다. 가상 함수는 파생 클래스에서 재정의할 수 있는데, 이를 방지하기 위해 `final`을 사용하는 것이다. 만약 `final` 함수를 오버라이드하려고 한다면 컴파일러가 에러를 발생시키게 된다. 다음 예제 코드를 보도록 하자. class A { public: virtual void foo() final { std::cout

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

[C++11] Default functions

C++11에서 `default` 키워드는 클래스의 특정 멤버 함수(생성자, 복사 생성자, 복사 대입 연산자 등)를 컴파일러에게 "기본 구현"을 생성하도록 지시한 데 사용된다. 주로 기본 구현을 사용하고자 할 때 유용하며, 코드 작성을 간결하게 만들어준다. #include class A { private: int x {1}; public: A() = default; A(int _x) : x{_x} {} }; int main(void) { A a; // 기본 생성자 호출 A b(123); // A::A(int _x) 호출 return 0; } 위와 같이 함으로써 기본으로 생성되는 생성자나 복자 생성자 등을 굳이 따로 정의하지 않더라도 기본값을 실행할 수 있게 해준다. 만약 이전의 C++ 버전이었다면 기본 생..

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

[C++11] Deleted functions

이전에 외부에서 함수의 사용을 막고자 할 때 (예를 들면 객체의 복사를 막고자 할 때) pirvate에 선언함으로써 해당 함수의 호출을 막았었다. class A { private: A(const A&); } 이제는 `delete` 키워드를 통해 사용하고자 하지 않는 함수의 사용을 완전 봉쇄할 수 있다. 특히나 객체의 복사를 막고자 할 때 유용하게 사용할 수 있다. #include class A { private: int x; public: A(int x) : x{x} {}; A(const A&) = delete; A& operator=(const A&) = delete; }; int main(void) { A x{1234}; A y = x; // error -- call to deleted bopy co..

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

[C++11] Range-based for loops

"range-based for loops"은 C++11로부터 도입된 컨테이너의 각 요소를 반복하기 위한 간편한 구문을 제공한다. 이를 사용하면 모든 요소에 접근하면서 반복 작업을 수행할 수 있다. 이는 컨테이너의 크기나 반복 횟수에 대한 신경을 쓰지 않게 해주어서 사소한 실수로 인한 오류를 줄여준다. 다음은 range-based for loop의 구문 및 사용 방법이다. for (element_type element : container) { // 반복 작업을 수행하는 코드 } `element_type`: 컨테이너의 각 요소의 데이터 형식을 나타낸다. `container`: 반복하고자 하는 컨테이너 변수 또는 컨테이너 객체이다. 다음 예시를 살펴보자. #include #include int main() ..

C++/Modern C++(11, 14, 17, 20) 2023. 8. 24. 17:31

[C++11] Special member functions for move semantics

복사 생성자와 복사 대입 연산자는 복사본이 만들어질 때 호출됐었다. 하지만 C++11의 `move semantics`가 생기면서 `move constructor`와 `move assignment operator`를 만들 수 있게 되었다. #include class B { public: std::string s; B() : s{"test"} {std::cout

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

추가 정보

인기글

최신글

페이징

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

티스토리툴바