이 페이지에서

C++20 개요

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

이 페이지에서는 Qt에서 사용할 수 있는 C++20 기능에 대해 간략하게 설명합니다.

WebEngine 및 모듈별 요구 사항

일반적으로 Qt 6은 C++17 호환 컴파일러만 요구하지만, Qt WebEngine 해당 모듈은 의존성(예: Chromium)으로 인해 C++20 호환 컴파일러가 필요합니다.

Qt WebEngine 를 빌드하는 경우, 사용 중인 컴파일러가 C++20을 완벽하게 지원하는지 확인하십시오.

자세한 요구 사항은 Qt WebEngine 플랫폼 참고 사항을 참조하십시오.

지원 사항 std::chrono

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

QDate 또한 QDateTime 은 다양한 캘린더, 날짜 및 날짜-시간 유형 간의 변환을 지원하며, 기간(duration) 유형도 추가되었습니다. ` 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 버전과 호환됩니다. QSpan 와 std::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() ` 헬퍼 함수를 정의합니다. 이 함수들은 모두 숨겨진 프렌드(hidden friends)로 구현됩니다. 사용자는 사용자 정의 유형에 대해 자체 ` compareThreeWay() ` 함수를 구현할 수 있습니다.

마지막으로, Qt는 qCompareThreeWay() 함수 템플릿을 제공하며, 이는 범용적인 3자 비교 구현 역할을 합니다. 이 함수의 구현은 Qt::compareThreeWay() 및 앞서 언급한 자유 compareThreeWay() 함수들에 의존합니다.

기타 중요한 기능

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

  • Q_CONSTINIT C++20의 constinit 키워드로 확장되거나, 사용 가능한 경우 컴파일러별 속성으로 확장되는 매크로
  • Q_NODISCARD_CTOR 컴파일러가 생성자에 대한 ` [[nodiscard]] `를 지원하는 경우 ` [[nodiscard]] ` 속성으로 확장되는 매크로
  • Q_NODISCARD_X 그리고 다음을 위한 Q_NODISCARD_CTOR_X 매크로: [[nodiscard("reason")]]

© 2026 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.