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

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

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

Visual Studio의 새로운 기능과 버그 수정에 대한 요약은 Visual Studio 2022 버전 17.2의 새로운 기능을 참조하세요.

  • 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++ 기능

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 프로젝트의 프로젝트 메뉴가 간소화되었으며 "캐시 삭제 및 다시 구성 " 및 "캐시 보기"에 대한 옵션이 표시됩니다.

  • P1689R4에 설명된 것처럼 CMake 프로젝트의 C++20 모듈 종속성을 나열하도록 /scanDependencies 컴파일러 옵션이 구현되었습니다. 이는 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 블로그)에서 특별히 관심 있는 내용을 확인할 수 있습니다.