Visual Studio 2022의 새로운 C++ 기능

Visual Studio 2022에는 Microsoft C++ 환경에 대한 많은 업데이트와 수정이 포함되었습니다. 컴파일러와 도구에 기능이 추가되고 여러 버그와 문제가 해결되었습니다. 또한 Visual Studio IDE는 성능과 생산성이 크게 향상되었으며, 이제 기본적으로 64비트 애플리케이션으로 실행됩니다.

모든 Visual Studio의 새로운 기능에 대한 자세한 내용은 Visual Studio 2022의 새로운 기능 을 참조하세요. C++ 문서의 새로운 내용에 대한 자세한 내용은 Microsoft C++ 문서: 새로운 기능

Visual Studio 버전 17.4의 C++의 새로운 기능

버전 17.34의 Visual Studio에서 새로운 기능 및 버그 수정에 대한 요약은 Visual Studio 2022 버전 17.3 릴리스 정보를 참조하세요.

  • 특히 개념에 대해 더 정확하고 유용한 정보를 제공하도록 컴파일러 오류 메시지가 개선되었습니다.

  • SARIF 빌드 로그를 지정된 디렉터리에 출력하는 실험적 MSVC 플래그 /experimental:log<directory> 가 추가되었습니다.

  • IntelliSense에 C23 특성에 대한 지원이 추가되었으며 C++20 모듈 지원에서 계속 진행되었습니다.

  • 새 솔루션을 열 때 인덱싱 성능이 향상되었습니다. 대규모 프로젝트는 17.3에서 20-35% 개선된 것을 볼 수 있습니다.

  • 향상된 NRVO(명명된 반환 값 최적화):

    • 예외 처리 또는 루프와 관련된 경우 NRVO를 사용할 수 있습니다.
    • NRVO는 사용자가 플래그를 전달하는 경우에도 /Od 또는 이상 또는 /permissive-에서 사용하도록 설정됩니다/Zc:nrvo./std:c++20
    • 이제 플래그를 사용하여 NRVO를 /Zc:nrvo- 사용하지 않도록 설정할 수 있습니다.
  • Visual Studio와 함께 제공되는 LLVM 버전을 15.0.1로 업그레이드했습니다. 사용 가능한 항목에 대한 자세한 내용은 LLVMClang 릴리스 정보를 참조하세요.

  • CMake 프로젝트를 사용하여 vcpkg 아티팩트용 Visual Studio에 대한 지원이 추가되었습니다. vcpkg 매니페스트를 포함하는 프로젝트의 경우 열려 있는 프로젝트에서 환경이 자동으로 활성화됩니다. Visual Studio의 vcpkg 환경 활성화 블로그 게시물에서 이 기능에 대해 자세히 알아보세요.

  • 이제 C++ 프로젝트에 개발 컨테이너를 사용할 수 있습니다. C++용 개발 컨테이너 블로그 게시물에서 이 기능에 대해 자세히 알아보세요.

  • 이제 IntelliSense는 PCH인 경우 미리 포함된 헤더의 순서를 준수합니다. 이전에는 를 통해 PCH를 사용하고 를 통해 /Yu/FI강제로 포함되었을 때 IntelliSense는 를 통해 /FI포함된 다른 헤더 앞에 항상 먼저 PCH를 처리했습니다. 이 동작이 빌드 동작과 일치하지 않습니다. 이 변경 /FI 으로 헤더는 지정된 순서대로 처리됩니다.

  • 테스트 탐색기의 CTest 이름에서 내부 접두사를 제거했습니다.

  • Visual Studio와 함께 제공되는 CMake 버전을 버전 3.24.1로 업데이트했습니다. 사용 가능한 항목에 대한 자세한 내용은 CMake 릴리스 정보를 참조하세요.

  • Android SDK 업데이트:

    • Ant 스크립트가 제거되었으므로 사용자는 새 프로젝트 대화 상자에서 더 이상 Ant 기반 템플릿을 볼 수 없습니다. Ant 템플릿에서 Gradle 템플릿으로 마이그레이션하는 데 도움이 되는 도움말은 Apache Ant에서 빌드 마이그레이션을 참조하세요.
    • NDK 23 및 24를 사용하여 빌드에 대한 지원이 추가됨
    • NDK 구성 요소를 LTS 버전 23으로 업데이트
  • , ranges::max_element()및 의 ranges::min_element()벡터화된 구현이 추가됨ranges::minmax_element()

  • C++ 표준화의 최신 개발을 계속 추적합니다. 이러한 C++23 기능에 대한 지원은 컴파일러 옵션에 를 포함하여 /std:c++latest 사용할 수 있습니다.

    • P2302R4ranges::contains, ranges::contains_subrange

    • P2499R0string_view 범위 생성자는 explicit

    • P0849R8auto(x): 언어로 된 감쇠 복사

      (컴파일러 부분은 아직 구현되지 않았습니다. 라이브러리 부분은 Ranges 지원이 처음 구현되었을 때 C++20 모드로 구현되었습니다.)

    • P0881R7<stacktrace>

    • P2301R1pmr 칭 추가 std::stacktrace

    • P1328R1constexpr type_info::operator==()

    • P2440R1ranges::iota, ranges::shift_left, ranges::shift_right

    • P2441R2views::join_with

  • 선언/정의 만들기 기능의 탐색 동작을 선택할 수 있는 "선언/정의 만들기 후 탐색" 옵션이 추가되었습니다. 피킹(기본값) 또는 문서 열기 중에서 선택하거나 탐색할 수 없습니다.

  • Visual Studio의 Arm64 빌드는 이제 CMake 및 Ninja의 Arm64 버전을 번들로 묶습니다.

  • CMake 사전 설정 버전 4에 대한 지원이 추가되었습니다. 사용 가능한 항목에 대한 자세한 내용은 CMake 릴리스 정보를 참조하세요.

  • 연결 관리자 사용하는 원격 시스템 연결은 이제 SSH ProxyJump를 지원합니다. ProxyJump는 다른 SSH 호스트를 통해 SSH 호스트에 액세스하는 데 사용됩니다(예: 방화벽 뒤의 호스트에 액세스하기 위해).

Visual Studio 버전 17.3의 C++의 새로운 기능

버전 17.3의 Visual Studio에서 새로운 기능 및 버그 수정에 대한 요약은 Visual Studio 2022 버전 17.3 릴리스 정보를 참조하세요.

  • Arm64EC 도구 체인은 더 이상 실험적 도구 체인으로 표시되지 않으며 프로덕션용으로 사용할 준비가 된 것입니다.

  • 이제 Visual Studio 터미널을 저장된 SSH 연결을 사용하여 SSH 클라이언트로 사용할 수 있습니다. Linux 도구용 C++가 설치된 상태에서 터미널 도구 창을 엽니다. 터미널 드롭다운은 저장된 연결로 채워집니다. 연결을 선택하면 원격 시스템의 의사 터미널을 표시하는 새 터미널 창이 Visual Studio 내에 열립니다. 컨트롤 문자, 색 및 커서 위치 인식이 모두 지원됩니다.

  • 이제 Visual Studio에서 UE 프로젝트에 대한 Unreal Engine 클래스 템플릿을 추가할 수 있습니다. 이 기능을 사용하려면 Visual Studio 설치 관리자 C++를 사용한 게임 개발 워크로드에서 Unreal Engine에 대한 IDE 지원이 선택되어 있는지 확인합니다. UE 프로젝트를 작업할 때 프로젝트 또는 폴더/필터를 마우스 오른쪽 단추로 클릭하고UE 클래스추가>를 선택합니다.

  • 정의로 이동 은 이제 이전 서명을 기억하고 더 나은 일치를 사용할 수 없는 경우(예: 쌍 중 하나의 서명을 수동으로 변경한 후) 그에 따라 탐색합니다. Go To All의 응답성이 향상되었습니다. 이전에는 입력을 중지한 후 결과가 나타났습니다. 새 환경에서 입력할 때 결과가 표시됩니다.

  • 형식 완성이 enum 필요한 컨텍스트(예: 변수, 사례 레이블, 반환 enum 형식 등에 대한 할당enum)에서 자동 완성 목록은 이제 일치하는 열거자 및 관련 구문으로만 필터링됩니다.

  • .NET Core를 대상으로 하는 C++/CLI MSBuild 프로젝트에 대한 NuGet PackageReference 지원이 추가되었습니다. 이 변경은 혼합 코드베이스가 .NET Core를 채택할 수 없도록 차단을 해제하기 위해 수행되었습니다. 이 지원은 다른 C++ 프로젝트 형식 또는 .NET Framework 대상으로 하는 C++ 프로젝트 형식에는 작동하지 않습니다. PackageReference 지원을 다른 C++ 시나리오로 확장할 계획은 없습니다. 팀은 비 MSBuild 시나리오에서 작동하고 더 큰 기능을 추가하는 vcpkg와 관련된 별도의 환경을 연구하고 있습니다.

  • Windows> 직렬 모니터 디버그>를 통해 사용할 수 있는 포함된 개발을 위한직렬 모니터 창이 추가되었습니다.

  • 17.2에 비해 C++ 인덱싱이 ~66% 향상되었습니다.

  • Visual Studio와 함께 제공되는 CMake 버전을 버전 3.23으로 업데이트했습니다. 사용 가능한 항목에 대한 자세한 내용은 CMake 3.23 릴리스 정보를 참조하세요.

  • Visual Studio와 함께 제공되는 LLVM 도구 버전을 v14로 업그레이드했습니다. 사용 가능한 항목에 대한 자세한 내용은 LLVMClang 릴리스 정보를 참조하세요.

  • Side-by-side Dev 16.11 C++ 도구 집합을 버전 14.29.30145.00으로 업데이트했습니다. Dev 16.11 C++ 도구 집합의 최신 버전에는 나머지 모든 C++20 결함 보고서 수정을 비롯한 중요한 버그 수정이 포함되어 있습니다. Dev 16.11의 C++20 결함 보고서를 비롯한 버그 수정에 대한 자세한 내용은 Visual Studio 2019 버전 16.11.14 릴리스 정보를 참조하세요.

  • C++ 모듈의 편집기 내 환경을 다양하게 개선했습니다. 우리는 지속적으로 경험의 품질을 개선하기 위해 노력하고 있지만 17.3에서 시도하는 것이 좋습니다. Developer Community 통해 나머지 문제를 보고합니다.

Visual Studio 버전 17.2의 새로운 C++ 기능

버전 17.2의 Visual Studio에서 새로운 기능 및 버그 수정에 대한 요약은 Visual Studio 2022 버전 17.1 릴리스 정보를 참조하세요.

  • C++23의 this 추론하기 기능에 대한 컴파일러 지원이 추가되었으며, /std:c++latest 옵션에서 사용가능합니다.

  • C++23의 this추론하기if consteval 기능에 대한 IntelliSense 지원이 추가되었습니다.

  • 인라인 매개 변수 이름과 형식 힌트 지원이 추가되었습니다. Alt+F1 키를 누르거나 Ctrl을 두 번 탭하면 토글됩니다. 이 동작은 도구 > 옵션 > 텍스트 편집기 > C/C++ > IntelliSense에서 사용자 지정할 수 있습니다.

  • CMake 프로젝트에 C++20 모듈에 대한 실험적인 지원이 추가되었습니다. 현재 이 기능은 Visual Studio(MSBuild) 생성기에서만 사용할 수 있습니다.

  • 17.1에서는 임베디드 개발자를 위한 주변 장치 레지스터 및 RTOS 보기를 도입했습니다. 17.2의 유용성 개선 사항을 통해 이러한 보기의 기능이 계속해서 개선될 것입니다.

    • RTOS 도구 창은 이제 기본적으로 숨겨집니다. 따라서 RTOS를 사용하지 않을 때는 관련이 없는 오류 메시지가 도구 창에 표시되지 않습니다.
    • 도구 창에서 RTOS 개체를 선택(두 번 클릭)하면 개체에 대한 조사식이 추가됩니다.
    • RTOS 도구 창에서 스택 포인터의 시작 및 끝 값을 선택하면 메모리 창에서 열립니다.
    • 호출 스택 창에 디바이스 대상에 대한 스레드 인식을 추가했습니다.
    • 이제 주변 장치, 레지스터 또는 필드는 그 옆의 고정 아이콘을 클릭하면 주변 장치 보기의 최상단에 고정할 수 있습니다.
  • 나머지 C++20 결함 보고서( 백포트라고도 함)의 구현을 추가했습니다. 이제 모든 C++20 기능을 /std:c++20 옵션에서 사용할 수 있습니다. 구현된 백포트에 대한 자세한 내용은 Microsoft/STL GitHub 리포지토리의 C++20 결함 보고서 프로젝트MSVC's STL Completes /std:c++20 블로그 게시물을 참조하세요.

  • /std:c++latest 옵션에서 사용할 수 있는 다양한 C++23 라이브러리 기능을 추가했습니다. 새 기능에 대한 자세한 내용은 STL 리포지토리 변경 로그를 참조하세요.

  • 포함 그래프의 깊이에 따라 초기 C++ 인덱싱의 성능이 최대 20%까지 향상되었습니다.

Visual Studio 버전 17.1의 새로운 C++ 기능

버전 17.1의 Visual Studio에서 새로운 기능 및 버그 수정에 대한 요약은 Visual Studio 2022 버전 17.1 릴리스 정보를 참조하세요.

  • CMakePresets.json을 사용하여 원격 macOS 시스템에서 CMake 프로젝트를 구성하고 빌드하기 위한 새 구성 사전 설정 템플릿이 추가되었습니다. 원격 macOS 시스템에서 CMake 대상을 시작하고 GDB 또는 LLDB로 지원되는 Visual Studio 디버거에서 원격으로 디버그할 수도 있습니다.

  • 이제 LLDB 또는 GDB를 사용하여 Visual Studio에서 원격 macOS 시스템의 코어 덤프를 디버그할 수 있습니다.

  • Visual Studio와 함께 제공되는 ClangLLVM 버전이 v13으로 업그레이드되었습니다.

  • Visual Studio의 CMake 통합은 열려 있는 작업 영역의 루트에서 CMakeLists.txt가 식별되는 경우에만 활성화됩니다. 다른 수준의 작업 영역에서 CMakeLists.txt가 식별되면 알림을 통해 Visual Studio의 CMake 통합을 활성화하라는 메시지가 표시됩니다.

  • 포함된 대상에 대한 새 레지스터 시각화 창이 추가되어, 디버그>Windows>포함된 레지스터를 통해 사용할 수 있습니다.

  • 디버그>Windows>RTOS 개체를 통해 사용할 수 있는 RTOS 프로젝트에 대한 새 스레드 뷰가 추가되었습니다.

Visual Studio 버전 17.0의 새로운 C++ 기능

Visual Studio의 새로운 기능 및 버그 수정에 대한 요약은 Visual Studio 2022 버전 17.0 릴리스 정보를 참조하세요.

  • Visual Studio IDE( devenv.exe )는 이제 네이티브 64비트 애플리케이션입니다.

  • 이제 MSVC 도구 집합은 디버그 레코드의 SHA-256 원본 해시로 기본 설정됩니다. 이전에는 도구 집합이 기본적으로 원본 해시에 MD5를 사용했습니다.

  • v143 빌드 도구는 이제 Visual Studio 설치 관리자를 통해 사용할 수 있으며 독립 실행형 빌드 도구에서도 사용할 수 있습니다.

네이티브 C++용 핫 다시 로드

  • C++용 핫 다시 로드를 사용하면 실행 중인 앱에서 많은 형식의 코드를 편집하고 중단점처럼 앱 실행을 일시 중지할 필요 없이 적용할 수 있습니다.

Visual Studio 2022에서는 디버거에서 앱을 시작할 때 핫 다시 로드 단추를 사용하여 애플리케이션이 실행되는 동안 애플리케이션을 수정할 수 있습니다. 이 환경은 네이티브 편집하며 계속하기로 구동됩니다. 지원되는 편집에 대한 자세한 내용은 편집하며 계속하기(C++)를 참조하세요.

  • 핫 다시 로드는 CMake 및 Open Folder 프로젝트를 지원합니다.

WSL2 지원

  • 이제 SSH 연결을 설정하지 않고도 WSL2에서 기본적으로 빌드하고 디버그할 수 있습니다. 플랫폼 간 CMake 프로젝트와 MSBuild 기반 Linux 프로젝트가 모두 지원됩니다.

향상된 CMake 지원

  • Visual Studio와 함께 제공되는 CMake 버전을 버전 3.21로 업그레이드했습니다. 이 버전에서 사용할 수 있는 기능에 대한 자세한 내용은 CMake 3.21 릴리스 정보를 참조하세요.

  • CMake 개요 페이지가 CMakePresets.json 을 지원하도록 업데이트되었습니다.

  • 이제 CMake 3.21 및 CMakePresets.json v3을 사용하여 CMake 프로젝트를 구성하고 빌드할 수 있습니다.

  • Visual Studio가 이제 CMakePresets.jsonbuildPresets.targets 옵션을 지원합니다. 이 옵션을 통해 CMake 프로젝트에서 대상의 하위 집합을 빌드할 수 있습니다.

  • CMake 프로젝트의 프로젝트 메뉴가 간소화되었으며 "캐시 삭제 및 다시 구성 " 및 "캐시 보기"에 대한 옵션이 표시됩니다.

  • P1689R5에 설명된 /scanDependencies 대로 CMake 프로젝트에 대한 C++20 모듈 종속성을 나열하는 컴파일러 옵션을 구현했습니다. 이는 CMake를 통해 모듈 기반 프로젝트를 빌드하기 위한 지원 단계이며, 이후 릴리스에서 이 지원을 완료하기 위해 노력하고 있습니다.

표준 라이브러리 향상

표준 라이브러리(STL) 향상 내용이 여기에 강조 표시되어 있습니다. 새 기능, 변경 내용, 버그 수정 및 성능 향상에 대한 포괄적인 목록은 STL 팀의 Changelog를 참조하세요.

  • source_location, bind_front(), u8string(및 반복기), default_sentinel_t, unreachable_sentinel_t, ranges::empty_view, ranges::single_view, ranges::iota_view(및 반복기/sentinel), ranges::ref_view, thread, thread::id, jthreadfilesystem::path 형식이 표시되는 방식을 개선하기 위해 디버깅 시각화 도우미를 추가했습니다.
  • collate 멤버 함수, has_facet(), isalnum(), tolower() 패밀리처럼 <string>stoi() 함수 패밀리와 <locale>의 다양한 함수에 [[nodiscard]]를 추가했습니다.
  • P0980R1 VS 2019 16.10에 std::stringconstexpr을 만들었습니다. 이제 Clang에 대해서도 지원됩니다.
  • P1004R2 VS 2019 16.10에 std::vectorconstexpr을 만들었습니다. 이제 Clang에 대해서도 지원됩니다.

눈의 띄는 C++23 기능

  • P1048R1 형식이 범위가 지정된 열거형인지 여부를 검색하는 C++ 표준 라이브러리의 새 특성인 is_scoped_enum을 추가했습니다.
  • P1132R7out_ptr(), inout_ptr()
  • P1679R3contains()basic_stringbasic_string_view의 경우
  • P1682R3 열거형의 경우 to_underlying()
  • P2162R2std::variant에서 상속 허용
  • P2166R1nullptr에서 basic_stringbasic_string_view 생성 금지 이는 원본 호환성이 손상되는 변경입니다. 이전에 런타임에 정의되지 않은 동작이 있었던 코드는 이제 컴파일러 오류로 거부됩니다.
  • P2186R2 가비지 수집 지원을 제거했습니다. 이 변경은 declare_reachable, undeclare_reachable, declare_no_pointers, undeclare_no_pointers, get_pointer_safety를 제거합니다. 이전에는 이러한 함수가 영향을 미치지 않았습니다.

눈에 띄는 성능 향상

  • <format>이 이제 basic_string 또는 vector에 대해 back_insert_iterator에 기록되는 때를 검색하고 컨테이너의 end()에서 insert()로 빠르게 호출합니다.
  • vector<bool>에 대한 std::find()std::count()가 19배, 26배 향상되었습니다.
  • vector<bool>에 대한 std::count()의 성능이 향상되었습니다.
  • std::byte가 이제 reverse()variant::swap()에서 unsigned char와 성능이 같아졌습니다.

Clang 및 LLVM 지원

  • Visual Studio와 함께 제공되는 LLVM 도구가 LLVM 12로 업그레이드되었습니다. 자세한 내용은 LLVM 릴리스 정보를 참조하세요.

  • Clang-cl 지원이 LLVM 12로 업데이트되었습니다.

  • 원격 시스템에서 실행되는 프로세스를 Visual Studio에서 LLDB를 사용하여 디버그할 수 있습니다.

C++ AMP가 사용되지 않음

  • C++ AMP 헤더는 이제 사용되지 않습니다. C++ 프로젝트에 <amp.h>를 포함하면 빌드 오류가 발생합니다. 오류를 해결하려면 _SILENCE_AMP_DEPRECATION_WARNINGS를 정의합니다. 자세한 내용은 AMP 사용 중단 링크를 참조하세요.

IntelliSense 개선 사항

  • 가져온 모듈 및 헤더 단위의 형식에 대한 탐색 및 구문 강조 표시를 제공하는 경우 C++ IntelliSense 기능이 개선되었습니다. IntelliSense는 Microsoft의 실질적인 투자 영역입니다. 개선할 수 있도록 도와주세요. Developer Community에서 도움말>피드백 보내기를 사용하여 피드백을 공유하세요.

  • 캐시된 헤더 사용 및 기호 데이터베이스 액세스를 최적화하여 C++ IntelliSense 성능을 향상함으로써 코드로 가져올 수 있는 로드 시간이 향상되었습니다.

  • 이제 C++용 IntelliSense 코드 Linter가 기본적으로 설정되어 입력에 따른 즉각적인 제안 및 일반적인 코드 결함에 대한 수정 제한 사항을 제공합니다.

  • 이제 CMake 프로젝트용 C++ IntelliSense가 표시 이름으로 사전 설정을 사용할 때 작동합니다.

C++ 워크로드 업데이트

  • C++ 모바일 개발 워크로드의 NDK r21 LTS로 업데이트되었습니다.

  • 이제 C++를 사용한 게임 개발 워크로드에서 Visual Studio 2022를 지원하는 최신 Unreal Engine을 설치합니다.

코드 분석 개선

  • 이제 코드 분석에서 _Check_return_ 또는 _Must_inspect_result_로 주석이 지정된 함수의 반환 값을 확인해야 합니다.

  • 코드 분석 도구에서 Null 포인터 역참조 검색이 향상되었습니다.

  • gsl::not_null에 대한 지원이 코드 분석에 추가되었습니다.

  • /fsanitize=fuzzer 컴파일러 옵션에서 Libfuzzer를 지원합니다.

이전 버전의 릴리스 정보

이전 C++ 버전의 릴리스 정보도 제공됩니다. Visual Studio 2019의 새로운 C++ 기능에 관한 내용은 Visual Studio 2019의 새로운 C++ 기능을 참조하세요. Visual Studio 2017의 새로운 C++ 기능에 관한 내용은 Visual Studio 2017의 새로운 C++ 기능을 참조하세요. 이전 버전의 새로운 기능에 관한 내용은 Visual C++ 2003~2015의 새로운 기능을 참조하세요.

알려진 문제

C++ IntelliSense

Visual Studio 2022에서 C++에 대한 기타 미해결 문제 및 사용 가능한 해결 방법에 대한 자세한 내용은 C++ Developer Community 문제 목록을 참조하세요.

피드백 및 제안

많은 의견 부탁드립니다. 설치 관리자나 Visual Studio IDE의 오른쪽 위에 있는 피드백 보내기를 사용하거나 도움말>피드백 보내기에서 문제를 보고하거나 기능을 제안할 수 있습니다. 설명을 추가하거나 해결 방법을 찾을 수 있는 Visual Studio Developer Community를 사용하여 문제를 추적할 수 있습니다. 라이브 채팅 지원을 통해 무료 설치 도움말을 가져올 수도 있습니다.

블로그

Microsoft Developer Blogs(Microsoft 개발자 블로그) 사이트에서 제공되는 정보와 권장 사항을 활용하세요. 모든 새 릴리스에 대한 최신 정보가 제공됩니다. 블로그에는 다양한 기능에 대한 심층적인 게시물이 제공됩니다. C++ Team Blog(C++ 팀 블로그) 및 Visual Studio Blog(Visual Studio 블로그)에서 특별히 관심 있는 내용을 확인할 수 있습니다.