C++20 개요

Qt 6는 공식적으로 C++17을 요구하지만, Qt를 더 빠르고 안전하게 만들고 사용자에게 더 나은 경험을 제공하기 위해 새로운 C++ 언어 기능을 지원하기 위해 지속적으로 노력하고 있습니다.

이 페이지에서는 Qt에서 사용할 수 있는 C++20 기능에 대한 간략한 개요를 제공합니다.

지원 대상 std::chrono

날짜와 시간에 관련된 다양한 클래스는 이전 버전의 C++에서 std::chrono 기능을 지원합니다. C++20의 출시와 함께 std::chrono 에는 year_month_day와 같은 새로운 달력 유형과 system_clock 및 그 time_point 유형과 같은 날짜 및 시간 표현이 추가되었습니다. 또한 이제 시간대 관련 정보의 IANA 데이터베이스에 대한 액세스를 제공합니다. C++20으로 빌드된 Qt는 이제 이러한 추가 기능을 활용할 수 있습니다.

QDate QDateTime 은 이제 기간 유형 추가와 함께 다양한 달력, 날짜 및 날짜-시간 유형으로의 변환과 변환을 지원합니다. QTimeZone 은 이제 time_zone으로부터의 구성을 지원합니다.

QTimeZone timezone_tzdb 기능을 활성화하여 빌드하면 플랫폼별 백엔드 대신 C++20 tzdb 기능을 사용하여 시간대 정보에 액세스할 수도 있습니다. 일부 표준 라이브러리 구현이 시간대에 대한 IANA 데이터를 충실하게 표현하지 못하기 때문에 Qt 6.9에서는 이 기능이 실험적으로 유지됩니다.

QSpan - Qt 버전 std::span

std::span 클래스 템플릿은 표준 라이브러리에 추가된 것으로, 인접한 컨테이너의 인접한 부분에 액세스하는 일관된 방법을 제공합니다.

Qt의 공용 API에서 std::span 을 사용하면 상당한 이점을 얻을 수 있습니다. 그러나 Qt 6은 C++17만 필요하므로 API와 ABI에 C++20 유형을 사용할 수 없습니다.

Qt 6.7에서는 std::span 의 Qt 버전인 QSpan 을 도입했는데, 이 클래스의 API는 std 버전과 호환됩니다. QSpanstd::span 은 암시적으로 서로 변환할 수 있습니다. 그러나 클래스 간에는 몇 가지 차이점이 있습니다. 자세한 내용은 QSpan class documentation 의 해당 섹션을 참조하세요.

3방향 비교 연산자

C++20에서는 3방향 비교 연산자라고도 하는 operator<=>() 와 비교 결과를 나타내는 세 가지 순서 지정 유형을 도입했습니다:

Qt 6.8에서는 많은 QtCore 클래스가 operator<=>() 을 지원하게 되었습니다. 새 연산자를 사용하려면 사용자 프로젝트를 C++20 모드로 컴파일해야 합니다.

그러나 Qt 6.7부터는 C++17 사용자도 자체적으로 개발한 std 순서 지정 유형을 사용할 수 있습니다.

C++20 언어 기능으로 operator<=>() 을 C++17로 백포트하는 것은 불가능하지만, 내장된 C++ 유형(정수, 부동 소수점, 열거형 등)에 대해 operator<=>() 의 C++17 버전처럼 작동하는 Qt::compareThreeWay() 함수를 사용할 수 있습니다.

Qt는 또한 QtCore 에서 다양한 클래스에 대한 헬퍼 함수 compareThreeWay() 를 정의합니다. 이들은 모두 숨겨진 친구로 구현됩니다. 사용자는 사용자 정의 유형에 대해 자신만의 compareThreeWay() 함수를 구현할 수 있습니다.

마지막으로, Qt는 일반적인 3방향 비교 구현으로 사용되는 qCompareThreeWay() 함수 템플릿을 제공합니다. 이 함수는 구현 시 Qt::compareThreeWay()와 위에서 언급한 무료 compareThreeWay() 함수에 의존합니다.

기타 중요한 기능

Qt는 다음과 같은 C++20의 몇 가지 기능도 추가로 채택했습니다:

  • Q_CONSTINIT C++20 constinit 키워드로 확장하거나 컴파일러별 어트리뷰트를 사용할 수 있는 경우 확장하는 매크로
  • Q_NODISCARD_CTOR 컴파일러가 생성자에서 [[nodiscard]] 을 지원하는 경우 [[nodiscard]] 어트리뷰트로 확장하는 매크로
  • Q_NODISCARD_XQ_NODISCARD_CTOR_X 매크로를 지원하는 경우 [[nodiscard("reason")]]

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.