Visual Studio의 새로운 C++ 기능What's new for C++ in Visual Studio

Visual Studio 2019에는 Microsoft C++ 환경에 대한 많은 업데이트와 수정이 포함되었습니다.Visual Studio 2019 brings many updates and fixes to the Microsoft C++ environment. 컴파일러 및 도구에서 많은 버그와 문제가 해결되었습니다.We've fixed many bugs and issues in the compiler and tools. 이러한 문제는 대부분, 고객이 피드백 보내기 아래의 문제 보고제안하기 옵션을 통해 제출한 것입니다.Many of these issues were submitted by customers through the Report a Problem and Provide a Suggestion options under Send Feedback. 버그를 알려 주셔서 감사합니다.Thank you for reporting bugs! 모든 Visual Studio의 새로운 기능에 대한 자세한 내용은 Visual Studio 2019의 새로운 기능을 참조하세요.For more information on what's new in all of Visual Studio, visit What's new in Visual Studio 2019. Visual Studio 2017의 새로운 C++ 기능에 대한 자세한 내용은 Visual Studio 2017의 새로운 C++ 기능을 참조하세요.For information on what's new for C++ in Visual Studio 2017, see What's new for C++ in Visual Studio 2017. Visual Studio 2015 및 이전 버전의 새로운 C++ 기능에 대한 자세한 내용은 Visual C++ 2003~2015의 새로운 기능을 참조하세요.For information on what's new for C++ in Visual Studio 2015 and earlier versions, see Visual C++ What's New 2003 through 2015.

C++ 컴파일러C++ compiler

  • C++ 17 기능 및 정확성 수정에 대한 향상된 지원 및 모듈, 코루틴 등과 같은 C++ 20 기능에 대한 실험적 지원입니다.Enhanced support for C++17 features and correctness fixes, plus experimental support for C++20 features such as modules and coroutines. 자세한 내용은 Visual Studio 2019의 C++ 규칙 향상을 참조하세요.For detailed information, see C++ Conformance Improvements in Visual Studio 2019.

  • /std:c++latest 옵션에는 세 방향 비교를 위한 C++20 연산자 <=> ("spaceship")의 초기 지원을 포함한 완료되지 않은 C++20 기능이 포함되어 있습니다.The /std:c++latest option now includes C++20 features that aren't necessarily complete, including initial support for the C++20 operator <=> ("spaceship") for three-way comparison.

  • C++ 컴파일러 스위치 /Gm은 이제 사용되지 않습니다.The C++ compiler switch /Gm is now deprecated. 명시적으로 정의된 경우 빌드 스크립트에서 /Gm 스위치를 사용하지 않도록 설정하는 것이 좋습니다.Consider disabling the /Gm switch in your build scripts if it's explicitly defined. 하지만 "경고를 오류로 처리"(/WX)를 사용하는 경우 오류로 처리되지 않으므로 /Gm에 대한 사용 중단 경고를 안전하게 무시할 수도 있습니다.However, you can also safely ignore the deprecation warning for /Gm, because it's not treated as an error when using "Treat warnings as errors" (/WX).

  • MSVC가 /std:c++latest 플래그 아래 C++20 표준 초안에서 기능을 구현하기 시작하므로 이제 /std:c++latest/clr(모든 버전), /ZW/Gm과 호환되지 않습니다.As MSVC begins implementing features from the C++20 standard draft under the /std:c++latest flag, /std:c++latest is now incompatible with /clr (all flavors), /ZW, and /Gm. Visual Studio 2019에서는 /clr, /ZW 또는 /Gm으로 컴파일할 경우 /std:c++17 또는 /std:c++14 모드를 사용합니다(하지만 이전 글머리 기호 참조).In Visual Studio 2019, use /std:c++17 or /std:c++14 modes when compiling with /clr, /ZW, or /Gm (but see previous bullet).

  • C++ 콘솔 및 데스크톱 앱의 경우 미리 컴파일된 헤더가 더 이상 생성되지 않습니다.Precompiled headers are no longer generated by default for C++ console and desktop apps.

Codegen, 보안, 진단 및 버전 관리Codegen, security, diagnostics, and versioning

스펙터 변형 1(CVE-2017-5753)에 대한 완화 지원을 제공하기 위해 /Qspectre를 사용한 분석을 개선했습니다.Improved analysis with /Qspectre for providing mitigation assistance for Spectre Variant 1 (CVE-2017-5753). 자세한 내용은 MSVC의 스펙터 완화를 참조하세요.For more information, see Spectre Mitigations in MSVC.

C++ 표준 라이브러리 향상C++ standard library improvements

  • 추가 C++17 및 C++20 라이브러리 기능 및 정확성 수정의 구현입니다.Implementation of additional C++17 and C++20 library features and correctness fixes. 자세한 내용은 Visual Studio 2019의 C++ 규칙 향상을 참조하세요.For detailed information, see C++ Conformance Improvements in Visual Studio 2019.

  • 가독성 향상을 위해 C++ 표준 라이브러리 헤더에 Clang 형식을 적용했습니다.Clang-Format has been applied to the C++ standard library headers for improved readability.

  • 이제 Visual Studio가 C++에 대해 내 코드만을 지원하므로 표준 라이브러리에서 동일한 효과를 얻기 위해 std::functionstd::visit의 사용자 지정 동작을 더 이상 제공할 필요가 없습니다.Because Visual Studio now supports Just My Code for C++, the standard library no longer needs to provide custom machinery for std::function and std::visit to achieve the same effect. 해당 동작을 제거해도 대체로 사용자에게 보이는 효과는 없습니다.Removing that machinery largely has no user-visible effects. 단, 컴파일러가 <type_traits> 또는 <variant>의 줄 15732480 또는 16707566에 문제가 있음을 나타내는 진단을 더 이상 생성하지 않습니다.One exception is that the compiler will no longer produce diagnostics that indicate issues on line 15732480 or 16707566 of <type_traits> or <variant>.

컴파일러 및 표준 라이브러리의 성능/처리량 향상Performance/throughput improvements in the compiler and standard library

  • 링커에서 파일 I/O를 처리하는 방식 및 PDB 형식 병합 및 생성 시 링크 시간을 포함한 빌드 처리량 향상된 기능입니다.Build throughput improvements, including the way the linker handles File I/O, and link time in PDB type merging and creation.

  • OpenMP SIMD 벡터화에 대한 기본 지원을 추가했습니다.Added basic support for OpenMP SIMD vectorization. 새 컴파일러 스위치 -openmp:experimental을 사용하여 사용하도록 설정할 수 있습니다.You can enable it using the new compiler switch -openmp:experimental. 이 옵션을 사용하면 #pragma omp simd로 주석을 단 루프가 잠재적으로 벡터화될 수 있습니다.This option allows loops annotated with #pragma omp simd to potentially be vectorized. 벡터화는 보장되지 않으며 주석이 있지만 벡터화되지 않은 루프에는 보고된 경고가 표시됩니다.The vectorization isn't guaranteed, and loops annotated but not vectorized will get a warning reported. SIMD 절은 지원되지 않으므로 무시되고 경고가 보고됩니다.No SIMD clauses are supported; they're ignored, and a warning is reported.

  • -Ob2의 적극적인 버전인 새로운 인라인 명령줄 스위치 -Ob3을 추가했습니다.Added a new inlining command-line switch -Ob3, which is a more aggressive version of -Ob2. -O2(속도를 위해 이진 파일 최적화)는 기본적으로 -Ob2를 의미합니다.-O2 (optimize the binary for speed) still implies -Ob2 by default. 컴파일러가 충분히 적극적으로 인라인하지 않는다면 -O2 -Ob3을 전달하는 것이 좋습니다.If you find that the compiler doesn't inline aggressively enough, consider passing -O2 -Ob3.

  • 수학 라이브러리 함수 및 정수 나누기와 같은 특정 다른 작업에 대한 호출을 포함하는 루프의 수동 벡터화를 지원하기 위해 SVML(Short Vector Math Library) 내장 함수에 대한 지원을 추가했습니다.To support hand vectorization of loops with calls to math library functions, and certain other operations like integer division, we've added support for Short Vector Math Library (SVML) intrinsic functions. 이러한 함수는 해당하는 128비트, 256비트 또는 512비트 벡터를 컴퓨팅합니다.These functions compute the 128-bit, 256-bit, or 512-bit vector equivalents. 지원되는 기능에 대한 정의는 Intel Intrinsic 가이드를 참조하세요.See the Intel Intrinsic Guide for definitions of the supported functions.

  • 새로운 기능과 향상된 최적화:New and improved optimizations:

    • 부동 소수점 및 정수 양식 모두에 대해 SIMD 벡터 내장 함수를 사용하는 식에 대한 상수 폴딩 및 산술을 단순화했습니다.Constant-folding and arithmetic simplifications for expressions using SIMD vector intrinsics, for both float and integer forms.

    • 제어 흐름(if/else/switch 문)에서 정보를 추출하여 항상 true 또는 false인 것으로 입증되는 분기를 제거하기 위한 강력한 분석을 추가했습니다.A more powerful analysis for extracting information from control flow (if/else/switch statements) to remove branches always proven to be true or false.

    • SSE2 벡터 지침을 사용하도록 memset 언롤링을 개선했습니다.Improved memset unrolling to use SSE2 vector instructions.

    • 특히 값으로 전달되는 C++ 프로그램의 경우 쓸모 없는 구조체/클래스 복사본 제거를 개선했습니다.Improved removal of useless struct/class copies, especially for C++ programs that pass by value.

    • std::copy, std::vectorstd::string 구문과 같은 memmove를 사용하여 코드의 최적화를 개선했습니다.Improved optimization of code using memmove, such as std::copy or std::vector and std::string construction.

  • 직접 포함되지 않은 표준 라이브러리 파트가 컴파일되지 않도록 표준 라이브러리 실제 디자인을 최적화했습니다.Optimized the standard library physical design to avoid compiling parts of the standard library not directly included. 이 변경으로 인해 <vector>만 포함된 빈 파일의 빌드 시간이 절반으로 단축되었습니다.This change cut the build time of an empty file that includes only <vector> in half. 따라서 이전에 간접적으로 포함된 헤더의 #include 지시문을 추가해야 할 수 있습니다.As a consequence, you may need to add #include directives for headers that were previously indirectly included. 예를 들어 std::out_of_range를 사용하는 코드는 이제 #include <stdexcept>를 추가해야 할 수 있습니다.For example, code that uses std::out_of_range may now need to add #include <stdexcept>. 스트림 삽입 연산자를 사용하는 코드는 이제 #include <ostream>을 추가해야 할 수 있습니다.Code that uses a stream insertion operator may now need to add #include <ostream>. 실제로 <stdexcept> 또는 <ostream> 구성 요소를 사용하는 번역 단위만 컴파일하는 데 처리량 비용을 지급한다는 장점이 있습니다.The benefit is that only translation units actually using <stdexcept> or <ostream> components pay the throughput cost to compile them.

  • 복사 작업, 순열(예: 반전 및 회전), 병렬 알고리즘 라이브러리의 처리량을 향상하고 코드 크기를 줄이기 위해 표준 라이브러리의 더 많은 곳에 if constexpr이 적용되었습니다.if constexpr was applied in more places in the standard library for improved throughput and reduced code size in copy operations, in permutations like reverse and rotate, and in the parallel algorithms library.

  • 이제 표준 라이브러리는 내부적으로 if constexpr을 사용하여 C++14 모드에서도 컴파일 시간을 줄입니다.The standard library now internally uses if constexpr to reduce compile times, even in C++14 mode.

  • 병렬 알고리즘 라이브러리의 런타임 동적 연결 검색은 더 이상 함수 포인터 배열을 저장하는 데 전체 페이지를 사용하지 않습니다.The runtime dynamic linking detection for the parallel algorithms library no longer uses an entire page to store the function pointer array. 이 메모리를 읽기 전용으로 표시하는 작업이 이제 보안과 관련이 없는 것으로 간주하였습니다.Marking this memory read-only was considered no longer relevant for security purposes.

  • std::thread의 생성자는 더 이상 스레드가 시작되기를 기다리지 않으며, 기본 C 라이브러리 _beginthreadex와 제공된 호출 가능 개체 간에 더 이상 너무 많은 함수 호출 레이어를 삽입하지 않습니다.std::thread's constructor no longer waits for the thread to start, and no longer inserts so many layers of function calls between the underlying C library _beginthreadex and the supplied callable object. 이전에 std::thread_beginthreadex와 제공된 호출 가능 개체 간에 6개 함수를 넣어 단 3개로 감소되었습니다(2개는 std::invoke에만 해당).Previously std::thread put 6 functions between _beginthreadex and the supplied callable object, which has been reduced to only 3 (2 of which are just std::invoke). 이 변경을 통해 정확히 std::thread가 생성되는 시점에 시스템 시계가 변경된 경우 std::thread의 생성자가 중단되는 모호한 타이밍 버그가 해결됩니다.This change also resolves an obscure timing bug, where a std::thread constructor would hang if the system clock changed at the exact moment the std::thread was being created.

  • std::hash<std::filesystem::path>를 구현할 때 도입된 std::hash에서 성능 회귀를 수정했습니다.Fixed a performance regression in std::hash that we introduced when implementing std::hash<std::filesystem::path>.

  • 이제 표준 라이브러리의 여러 곳에서 정확성을 위해 catch 블록 대신 소멸자를 사용합니다.The standard library now uses destructors instead of catch blocks in several places to achieve correctness. 이 변경으로 인해 디버거 상호 작용이 향상됩니다. 영향받는 위치에서 표준 라이브러리를 통해 throw하는 예외는 이제 다시 throw가 아니라 원래 throw 사이트에서 throw되는 것으로 표시됩니다.This change results in better debugger interaction: Exceptions you throw through the standard library in the affected locations now show up as being thrown from their original throw site, rather than our rethrow. 일부 표준 라이브러리 catch 블록이 제거되었으며, catch 블록 수가 MSVC의 이후 릴리스에서 감소할 것으로 예상합니다.Not all standard library catch blocks have been eliminated; we expect the number of catch blocks to be reduced in later releases of MSVC.

  • noexcept 함수 내부에서 조건부 throw로 인해 발생한 std::bitset의 최적이 아닌 Codegen은 throw 경로를 제외하여 수정되었습니다.Suboptimal codegen in std::bitset caused by a conditional throw inside a noexcept function was fixed by factoring out the throwing path.

  • std::liststd::unordered_* 패밀리는 더 많은 곳에서 내부적으로 디버그가 아닌 반복기를 사용합니다.The std::list and std::unordered_* family use non-debugging iterators internally in more places.

  • 목록 노드를 할당 취소한 후 다시 할당하는 대신 가능한 경우 목록 노드를 다시 사용하도록 여러 std::list 멤버가 변경되었습니다.Several std::list members were changed to reuse list nodes where possible rather than deallocating and reallocating them. 예를 들어, 이미 크기가 3인 list<int>의 경우 assign(4, 1729)을 호출하면 처음 3개 목록 노드의 int를 덮어쓰고 값이 1729인 새 목록 노드 하나가 할당됩니다.For example, given a list<int> that already has a size of 3, a call to assign(4, 1729) now overwrites the ints in the first 3 list nodes, and allocates one new list node with the value 1729.

  • erase(begin(), end())에 대한 모든 표준 라이브러리 호출이 clear()로 변경되었습니다.All standard library calls to erase(begin(), end()) were changed to clear().

  • std::vector는 이제 특정 경우에 요소를 더 효율적으로 초기화하고 지웁니다.std::vector now initializes and erases elements more efficiently in certain cases.

  • std::variant에 대한 향상된 기능으로 인해 최적화 프로그램이 친화적으로 만들어져 좋은 코드를 생성하게 되었습니다.Improvements to std::variant to make it more optimizer-friendly, resulting in better generated code. 코드 인라인은 std::visit를 사용하는 것이 좋습니다.Code inlining is now much better with std::visit.

C++ IDEC++ IDE

Live Share C++ 지원Live Share C++ support

Live Share는 이제 C++를 지원하므로 개발자가 Visual Studio 또는 Visual Studio Code를 사용하여 실시간으로 공동 작업을 수행할 수 있습니다.Live Share now supports C++, allowing developers using Visual Studio or Visual Studio Code to collaborate in real time. 자세한 내용은 C++용 Live Share 알림: 실시간 공유 및 협업을 참조하세요.For more information, see Announcing Live Share for C++: Real-Time Sharing and Collaboration

C++용 IntelliCodeIntelliCode for C++

Visual Studio 2019 버전 16.1Visual Studio 2019 version 16.1

IntelliCode는 광범위한 학습 및 코드 컨텍스트를 사용하는 선택적 확장으로 사용할 가능성이 가장 높은 항목을 완성 목록의 맨 위에 배치합니다.IntelliCode is an optional extension that uses its own extensive training and your code context to put what you’re most likely to use at the top of your completion list. 목록을 아래로 스크롤할 필요가 없어질 수 있습니다.It can often eliminate the need to scroll down through the list. C++의 경우 IntelliCode는 표준 라이브러리와 같은 인기 라이브러리를 사용할 때 가장 도움이 됩니다.For C++, IntelliCode offers the most help when using popular libraries such as the standard library. 설치 관리자에서 워크로드 구성 요소로 사용할 수 있습니다.It's available as a workload component in the installer. 자세한 내용은 IntelliCode를 통해 C++에 대한 AI 지원 코드 완성 추천을 참조하세요.For more information, see AI-Assisted Code Completion Suggestions Come to C++ via IntelliCode.

템플릿 IntelliSenseTemplate IntelliSense

이제 템플릿 모음은 모달 창 대신 피크 창 UI를 활용하고 중첩된 템플릿을 지원하며 모든 기본 인수를 피크 창에 미리 채웁니다.The Template Bar now uses the Peek Window UI rather than a modal window, supports nested templates, and pre-populates any default arguments into the Peek Window. 자세한 내용은 Visual Studio 2019 Preview 2에 대한 템플릿 IntelliSense 향상을 참조하세요.For more information, see Template IntelliSense Improvements for Visual Studio 2019 Preview 2. 템플릿 모음에서 가장 최근에 사용됨 드롭다운을 사용하면 샘플 인수의 이전 세트 간을 신속하게 전환할 수 있습니다.A Most Recently Used dropdown in the Template Bar enables you to quickly switch between previous sets of sample arguments.

새로운 시작 창 환경New Start window experience

IDE를 시작할 때 최근에 사용한 프로젝트 열기, 소스 제어에서 코드 복제, 솔루션 또는 폴더로 로컬 코드 열기, 새 프로젝트 만들기 옵션을 사용하여 새로운 시작 창이 나타납니다.When launching the IDE, a new Start window appears with options to open recent projects, clone code from source control, open local code as a solution or a folder, or create a new project. 새 프로젝트 대화 상자는 우선 검색, 필터링 가능 환경으로 철저히 점검되었습니다.The New Project dialog has also been overhauled into a search-first, filterable experience.

일부 프로젝트 템플릿에 대한 새 이름New names for some project templates

업데이트된 새 프로젝트 대화 상자에 맞게 몇 개의 프로젝트 템플릿 이름과 설명이 수정되었습니다.We've modified several project template names and descriptions to fit with the updated New Project dialog.

다양한 생산성 향상Various productivity improvements

Visual Studio 2019에는 코딩을 쉽고 직관적으로 만드는 데 도움이 되는 다음 기능이 포함됩니다.Visual Studio 2019 includes the following features that will help make coding easier and more intuitive:

  • 다음에 대한 빠른 수정:Quick fixes for:
    • 누락된 #include 추가Add missing #include
    • NULL에서 nullptr로NULL to nullptr
    • 누락된 세미콜론 추가Add missing semicolon
    • 누락된 네임스페이스 또는 범위 확인Resolve missing namespace or scope
    • 잘못된 간접 참조 피연산자 바꾸기(*를 &로, &를 *로)Replace bad indirection operands (* to & and & to *)
  • 닫는 중괄호를 마우스로 가리켜서 블록에 대한 요약 정보 제공Quick Info for a block by hovering on closing brace
  • 헤더/코드 파일 피킹Peek Header / Code File
  • #include에서 정의로 이동하여 파일 열기Go to Definition on #include opens the file

자세한 내용은 Visual Studio 2019 Preview 2의 C++ 생산성 향상을 참조하세요.For more information, see C++ Productivity Improvements in Visual Studio 2019 Preview 2.

요약 정보 향상QuickInfo improvements

Visual Studio 2019 버전 16.1Visual Studio 2019 version 16.1

이제 요약 정보 도구 설명은 편집기의 의미 체계 색 지정을 따릅니다.The Quick Info tooltip now respects the semantic colorization of your editor. 가리킨 코드 구문에 대한 자세한 정보를 알아보기 위해 온라인 문서를 검색할 새 온라인 검색 링크도 포함됩니다.It also has a new Search Online link that will search for online docs to learn more about the hovered code construct. 빨간색 구부러진 곡선 코드의 경우 요약 정보에서 제공된 링크는 온라인으로 오류를 검색합니다.For red-squiggled code, the link provided by Quick Info will search for the error online. 이 방법을 사용하면 브라우저에 메시지를 다시 입력하지 않아도 됩니다.This way you don’t need to retype the message into your browser. 자세한 내용은 Quick Info Improvements in Visual Studio 2019: Colorization and Search Online(Visual Studio 2019의 요약 정보 향상: 색 지정 및 온라인 검색)을 참조하세요.For more information, see Quick Info Improvements in Visual Studio 2019: Colorization and Search Online.

C++ 워크로드에서 사용 가능한 IntelliCodeIntelliCode available in C++ workload

Visual Studio 2019 버전 16.1Visual Studio 2019 version 16.1

이제 IntelliCode는 C++를 사용한 데스크톱 개발 워크로드의 선택적 구성 요소로 제공됩니다.IntelliCode now ships as an optional component in the Desktop Development with C++ workload. 자세한 내용은 Improved C++ IntelliCode now Ships with Visual Studio 2019(이제 향상된 C++ IntelliCode가 Visual Studio 2019와 함께 제공됨)을 참조하세요.For more information, see Improved C++ IntelliCode now Ships with Visual Studio 2019.

CMake 지원CMake support

  • CMake 3.14 지원Support for CMake 3.14

  • Visual Studio는 이제 CMakeGUI와 같은 외부 도구, 사용자 지정 메타 빌드 시스템 또는 cmake.exe 자체를 호출하는 빌드 스크립트에서 생성된 기존 CMake 캐시를 열 수 있습니다.Visual Studio can now open existing CMake caches generated by external tools, such as CMakeGUI, customized meta-build systems or build scripts that invoke cmake.exe themselves.

  • IntelliSense 성능이 개선되었습니다.Improved IntelliSense performance.

  • 새로운 설정 편집기는 CMakeSettings.json 파일을 수동으로 편집하기 위한 대안을 제공하고 CMakeGUI와 일부 패리티를 제공합니다.A new settings editor provides an alternative to manually editing the CMakeSettings.json file, and provides some parity with CMakeGUI.

  • Visual Studio는 Linux 머신에 호환되는 CMake 버전이 있는지 검색하여 Linux에서 CMake를 사용하여 C++ 개발을 부트스트랩하도록 도와줍니다.Visual Studio helps bootstrap your C++ development with CMake on Linux by detecting if you have a compatible version of CMake on your Linux machine. 그렇지 않은 경우 설치를 제공합니다.If not, it offers to install it for you.

  • 일치하지 않는 아키텍처 또는 호환되지 않는 CMake 생성기 설정과 같은 CMakeSettings의 호환되지 않는 설정은 JSON 편집기의 오류 표시선과 오류 목록의 오류를 표시합니다.Incompatible settings in CMakeSettings, such as mismatched architectures or incompatible CMake generator settings, show squiggles in the JSON editor and errors in the error list.

  • vcpkg integrate install이 실행된 후 IDE에서 열리는 CMake 프로젝트에 대해 vcpkg 도구 체인이 자동으로 검색되고 활성화됩니다.The vcpkg toolchain is automatically detected and enabled for CMake projects that are opened in the IDE once vcpkg integrate install has been run. 이 동작은 CMakeSettings에서 빈 도구 체인 파일을 지정하여 해제할 수 있습니다.This behavior can be turned off by specifying an empty toolchain file in CMakeSettings.

  • 이제 CMake 프로젝트는 기본적으로 내 코드만 디버깅을 활성화합니다.CMake projects now enable Just My Code debugging by default.

  • 이제 정적 분석 경고는 백그라운드에서 처리되어 CMake 프로젝트에 대한 편집기에 표시될 수 있습니다.Static analysis warnings can now be processed in the background and displayed in the editor for CMake projects.

  • CMake 프로젝트에 대한 '시작' 및 '종료' 메시지를 명확하게 빌드 및 구성하고, Visual Studio의 빌드 진행 UI를 지원합니다.Clearer build and configure 'begin' and 'end' messages for CMake projects and support for Visual Studio's build progress UI. 또한 이제 출력 창에서 CMake 빌드 및 구성 메시지의 세부 수준을 사용자 지정하는 도구 > 옵션의 CMake 세부 정보 설정이 있습니다.Additionally, there's now a CMake verbosity setting in Tools > Options to customize the detail level of CMake build and configuration messages in the Output Window.

  • 이제 cmakeToolchain 설정이 CMakeSettings.json에서 지원되어 CMake 명령줄을 수동으로 수정하지 않고도 도구 체인을 지정할 수 있습니다.The cmakeToolchain setting is now supported in CMakeSettings.json to specify toolchains without manually modifying the CMake command line.

  • 모두 빌드 메뉴 바로 가기 Ctrl+Shift+B입니다.A new Build All menu shortcut Ctrl+Shift+B.

Visual Studio 2019 버전 16.1Visual Studio 2019 version 16.1
  • Clang/LLVM을 사용하여 CMake 프로젝트를 편집, 빌드 및 디버그하기 위한 통합 지원.Integrated support for editing, building, and debugging CMake projects with Clang/LLVM. 자세한 내용은 Clang/LLVM Support in Visual Studio(Visual Studio의 Clang/LLVM 지원)를 참조하세요.For more information, see Clang/LLVM Support in Visual Studio.

Linux 및 Linux용 Windows 하위 시스템Linux and the Windows Subsystem for Linux

Visual Studio 2019 버전 16.1Visual Studio 2019 version 16.1

IncrediBuild 통합IncrediBuild integration

IncrediBuild는 C++를 사용한 데스크톱 개발 워크로드의 선택적 구성 요소로 포함됩니다.IncrediBuild is included as an optional component in the Desktop development with C++ workload. IncrediBuild Build Monitor는 Visual Studio IDE에 완벽하게 통합됩니다.The IncrediBuild Build Monitor is fully integrated in the Visual Studio IDE. 자세한 내용은 Visualize your build with IncrediBuild’s Build Monitor and Visual Studio 2019(IncrediBuild Build Monitor 및 Visual Studio 2019를 사용하여 빌드 시각화)을 참조하세요.For more information, see Visualize your build with IncrediBuild’s Build Monitor and Visual Studio 2019.

디버깅Debugging

  • Windows에서 실행되는 C++ 애플리케이션의 경우 PDB 파일은 이제 별도의 64비트 프로세스로 로드됩니다.For C++ applications running on Windows, PDB files now load in a separate 64-bit process. 이 변경 내용은 많은 수의 모듈과 PDB 파일이 포함된 애플리케이션을 디버그할 때 메모리가 부족한 디버거 실행으로 인해 발생하는 다양한 충돌을 해결합니다.This change addresses a range of crashes caused by the debugger running out of memory when debugging applications that contain a large number of modules and PDB files.

  • 검색은 조사식, 자동지역 창에서 사용할 수 있습니다.Search is enabled in the Watch, Autos, and Locals windows.

C++를 사용한 Windows 데스크톱 개발Windows desktop development with C++

  • 이러한 C++ ATL/MFC 마법사는 더 이상 사용할 수 없습니다.These C++ ATL/MFC wizards are no longer available:

    • ATL COM+ 1.0 구성 요소 마법사ATL COM+ 1.0 Component Wizard
    • ATL Active Server Pages 구성 요소 마법사ATL Active Server Pages Component Wizard
    • ATL OLE DB 공급자 마법사ATL OLE DB Provider Wizard
    • ATL 속성 페이지 마법사ATL Property Page Wizard
    • ATL OLE DB 소비자 마법사ATL OLE DB Consumer Wizard
    • MFC ODBC 소비자MFC ODBC Consumer
    • ActiveX 컨트롤의 MFC 클래스MFC class from ActiveX control
    • TypeLib의 MFC 클래스MFC class from Type Lib.

    이러한 기술에 대한 샘플 코드는 Microsoft Docs 및 VCSamples GitHub 리포지토리에 보관됩니다.Sample code for these technologies is archived at Microsoft Docs and the VCSamples GitHub repository.

  • Windows 8.1 SDK는 Visual Studio 설치 관리자에서 더 이상 사용할 수 없습니다.The Windows 8.1 SDK is no longer available in the Visual Studio installer. C++ 프로젝트를 최신 Windows 10 SDK로 업그레이드하는 것이 좋습니다.We recommend you upgrade your C++ projects to the latest Windows 10 SDK. 8.1에 대한 종속성이 높은 경우 Windows SDK 아카이브에서 다운로드할 수 있습니다.If you have a hard dependency on 8.1, you can download it from the Windows SDK archive.

  • Windows XP 대상은 최신 C++ 도구 세트에서 더 이상 사용할 수 없습니다.Windows XP targeting will no longer be available for the latest C++ toolset. VS 2017 수준 MSVC 컴파일러 및 라이브러리가 있는 XP 대상은 여전히 지원되며 "개별 구성 요소"를 통해 설치할 수 있습니다.XP targeting with VS 2017-level MSVC compiler & libraries is still supported and can be installed via "Individual components."

  • 설명서에서는 Visual C++ 런타임 배포를 위한 병합 모듈의 사용을 적극적으로 권장하지 않습니다.Our documentation actively discourages usage of Merge Modules for Visual C++ Runtime deployment. MSM이 사용되지 않는 것으로 표시하는 이번 릴리스의 추가 단계를 진행하고 있습니다.We're taking the extra step this release of marking our MSMs as deprecated. VCRuntime 중앙 배포를 MSM에서 재배포 가능 패키지로 마이그레이션하는 것이 좋습니다.Consider migrating your VCRuntime central deployment from MSMs to the redistributable package.

C++를 사용한 모바일 개발(Android 및 iOS)Mobile development with C++ (Android and iOS)

C++ Android 환경은 이제 기본적으로 Android SDK 25와 Android NDK 16b로 설정됩니다.The C++ Android experience now defaults to Android SDK 25 and Android NDK 16b.

Clang/C2 플랫폼 도구 집합Clang/C2 platform toolset

Clang/C2 실험적 구성 요소가 제거되었습니다.The Clang/C2 experimental component has been removed. C++ 표준을 완전하게 준수할 수 있도록 /permissive-/std:c++17 또는 Windows용 Clang/LLVM 도구 체인이 포함된 MSVC 도구 집합을 사용합니다.Use the MSVC toolset for full C++ standards conformance with /permissive- and /std:c++17, or the Clang/LLVM toolchain for Windows.

코드 분석Code analysis

Visual Studio 2019 버전 16.1Visual Studio 2019 version 16.1

단위 테스트Unit testing

관리되는 C++ 테스트 프로젝트 템플릿을 더 이상 사용할 수 없습니다.The Managed C++ Test Project template is no longer available. 기존 프로젝트에서 관리형 C++ 테스트 프레임워크를 사용하여 진행할 수 있습니다.You can continue using the Managed C++ Test framework in your existing projects. 새 단위 테스트의 경우, Visual Studio에서 템플릿(MSTest, Google Test) 또는 관리형 C# 테스트 프로젝트 템플릿을 제공하는 기본 프레임워크 중 하나를 사용하는 것이 좋습니다.For new unit tests, consider using one of the native test frameworks for which Visual Studio provides templates (MSTest, Google Test), or the Managed C# Test Project template.

Visual Studio 2017에는 C++ 환경에 대한 많은 업데이트와 수정이 포함되었습니다.Visual Studio 2017 brings many updates and fixes to the C++ environment. 대부분 피드백 보내기 아래의 문제 보고 및 제안하기 옵션을 통해 고객이 제출한 250개 이상의 버그와 보고된 문제를 해결했습니다.We've fixed over 250 bugs and reported issues in the compiler and tools, many submitted by customers through the Report a Problem and Provide a Suggestion options under Send Feedback. 버그를 알려 주셔서 감사합니다.Thank you for reporting bugs! 모든 Visual Studio의 새로운 기능에 대한 자세한 내용은 Visual Studio 2017의 새로운 기능을 참조하세요.For more information on what's new in all of Visual Studio, see What's new in Visual Studio 2017. Visual Studio 2019의 새로운 C++ 기능에 대한 자세한 내용은 Visual Studio의 새로운 C++ 기능을 참조하세요.For information on what's new for C++ in Visual Studio 2019, see What's new for C++ in Visual Studio. Visual Studio 2015 및 이전 버전의 새로운 C++ 기능에 대한 자세한 내용은 Visual C++ 2003~2015의 새로운 기능을 참조하세요.For information on what's new for C++ in Visual Studio 2015 and earlier versions, see Visual C++ What's New 2003 through 2015.

C++ 컴파일러C++ compiler

C++ 규칙 향상C++ conformance improvements

이 릴리스에서는 C++ 컴파일러 및 표준 라이브러리를 C++11 및 C++14 기능에 대한 강화된 지원 기능과, C++17 표준에서 선보일 것으로 예상되는 특정 기능에 대한 임시 지원 기능으로 업데이트했습니다.In this release, we've updated the C++ compiler and standard library with enhanced support for C++11 and C++14 features, as well as preliminary support for certain features expected to be in the C++17 standard. 자세한 내용은 Visual Studio 2017의 C++ 규칙 향상을 참조하세요.For detailed information, see C++ Conformance Improvements in Visual Studio 2017.

Visual Studio 2017 15.5 버전Visual Studio 2017 version 15.5

컴파일러는 구조적 바인딩, constexpr 람다, if constexpr, 인라인 변수, fold 식 및 형식 시스템에 noexcept 추가 등 C++17에 새롭게 추가된 기능의 약 75%를 지원합니다.The compiler supports about 75% of the features that are new in C++17, including structured bindings, constexpr lambdas, if constexpr, inline variables, fold expressions, and adding noexcept to the type system. 이러한 기능은 /std:c++17 옵션 아래에서 사용할 수 있습니다.These features are available under the /std:c++17 option. 자세한 내용은 Visual Studio 2017의 C++ 규칙 향상을 참조하세요.For more information, see C++ Conformance Improvements in Visual Studio 2017

Visual Studio 2017 버전 15.7Visual Studio 2017 version 15.7

Visual Studio 버전 15.7의 MSVC 컴파일러 도구 집합은 이제 C++ 표준을 준수합니다.The MSVC compiler toolset in Visual Studio version 15.7 now conforms with the C++ Standard. 자세한 내용은 알림: MSVC의 C++ 표준 준수Microsoft C++ 언어 규칙을 참조하세요.For more information, see Announcing: MSVC Conforms to the C++ Standard and Microsoft C++ Language Conformance.

새로운 컴파일러 옵션New compiler options

  • /permissive-: 모든 엄격한 표준 준수 컴파일러 옵션을 사용하고 대부분의 Microsoft 전용 컴파일러 확장(예: __declspec(dllimport) 제외)을 사용하지 않도록 설정합니다./permissive-: Enable all strict standards conformance compiler options and disable most Microsoft-specific compiler extensions (but not __declspec(dllimport), for example). 이 옵션은 Visual Studio 2017 버전 15.5에서 기본적으로 켜져 있습니다.This option is on by default in Visual Studio 2017 version 15.5. /permissive- conformance 모드에는 2단계 이름 조회에 대한 지원이 포함됩니다.The /permissive- conformance mode includes support for two-phase name lookup. 자세한 내용은 Visual Studio의 C++ 규칙 향상을 참조하세요.For more information, see C++ Conformance Improvements in Visual Studio.

  • /diagnostics: 줄 번호, 줄 번호 및 열 또는 줄 번호 및 열과 진단 오류 또는 경고가 발견된 코드 줄 아래의 캐럿을 표시할 수 있습니다./diagnostics: Enable display of the line number, the line number and column, or the line number and column and a caret under the line of code where the diagnostic error or warning was found.

  • /debug:fastlink: 일부 디버그 정보를 PDB 파일에 복사하지 않음으로써 최대 30%까지 빠른 증분 연결 시간(Visual Studio 2015 대비)을 사용합니다./debug:fastlink: Enable up to 30% faster incremental link times (vs. Visual Studio 2015) by not copying all debug information into the PDB file. 대신, PDB 파일은 실행 파일을 만드는 데 사용된 개체 및 라이브러리 파일에 대한 디버그 정보를 가리킵니다.The PDB file instead points to the debug information for the object and library files used to create the executable. Faster C++ build cycle in VS "15" with /Debug:fastlink(/Debug:fastlink를 사용하는 VS "15"의 더 빠른 C++ 빌드 주기) 및 Recommendations to speed C++ builds in Visual Studio(Visual Studio에서 C++ 빌드 속도를 향상하기 위한 권장 사항)를 참조하세요.See Faster C++ build cycle in VS "15" with /Debug:fastlink and Recommendations to speed C++ builds in Visual Studio.

  • Visual Studio 2017에서는 /sdl과 함께 /await를 사용할 수 있습니다.Visual Studio 2017 allows using /sdl with /await. 코루틴에서 /RTC 제한이 제거되었습니다.We removed the /RTC limitation with Coroutines.

Visual Studio 2017 15.3 버전Visual Studio 2017 version 15.3
  • /std:c++14 및 /std:c++latest: 이러한 컴파일러 옵션을 사용하면 프로젝트에서 특정 버전의 ISO C++ 프로그래밍 언어를 옵트인할 수 있습니다./std:c++14 and /std:c++latest: These compiler options enable you to opt in to specific versions of the ISO C++ programming language in a project. /std:c++latest 옵션은 대부분의 새 초안 표준 기능을 보호합니다.Most of the new draft standard features are guarded by the /std:c++latest option.

  • /std:c++17을 사용하면 컴파일러에서 구현된 일련의 C++17 기능을 사용할 수 있습니다./std:c++17 enables the set of C++17 features implemented by the compiler. 이 옵션에서는 C++17 이후의 C++표준 규격 초안(Working Draft) 및 결함 업데이트의 전에서 변경되거나 새로운 기능에 대한 컴파일러 및 표준 라이브러리 지원을 사용하지 않습니다.This option disables compiler and standard library support for features that are changed or new in versions of the Working Draft and defect updates of the C++ Standard after C++17. 이러한 기능을 사용하려면 /std:c++latest를 사용하세요.To enable those features, use /std:c++latest.

Codegen, 보안, 진단 및 버전 관리Codegen, security, diagnostics, and versioning

이 릴리스에서는 최적화, 코드 생성, 도구 집합 버전 관리 및 진단의 몇 가지 기능이 향상되었습니다.This release brings several improvements in optimization, code generation, toolset versioning, and diagnostics. 특히 주목할 만한 기능 향상은 다음과 같습니다.Some notable improvements include:

  • 루프의 향상된 코드 생성: 상수 정수 나누기의 자동 벡터화를 지원하며, memset 패턴 식별 기능이 향상되었습니다.Improved code generation of loops: Support for automatic vectorization of division of constant integers, better identification of memset patterns.
  • 코드 보안 개선: 버퍼 오버런 컴파일러 진단의 내보내기가 개선되었으며, 이제는 /guard:cf가 점프 테이블을 생성하는 스위치 문을 보호합니다.Improved code security: Improved emission of buffer overrun compiler diagnostics, and /guard:cf now guards switch statements that generate jump tables.
  • 버전 관리: 기본 제공 전처리기 매크로 _MSC_VER의 값이 이제 Visual C++ 도구 세트 업데이트 시마다 일정하게 업데이트됩니다.Versioning: The value of the built-in preprocessor macro _MSC_VER is now being monotonically updated at every Visual C++ toolset update. 자세한 내용은 Visual C++ Compiler Version(Visual C++ 컴파일러 버전)을 참조하세요.For more information, see Visual C++ Compiler Version.
  • 새 도구 세트 레이아웃: 개발 머신에서 컴파일러 및 관련된 빌드 도구의 위치 및 디렉터리 구조가 변경되었습니다.New toolset layout: The compiler and related build tools have a new location and directory structure on your development machine. 새 레이아웃을 사용하면 여러 버전의 컴파일러를 병렬 설치할 수 있습니다.The new layout enables side-by-side installations of multiple versions of the compiler. 자세한 내용은 Compiler Tools Layout in Visual Studio 2017(Visual Studio 2017의 컴파일러 도구 레이아웃)을 참조하세요.For more information, see Compiler Tools Layout in Visual Studio 2017.
  • 향상된 진단: 이제 출력 창에 오류가 발생하는 열이 표시됩니다.Improved diagnostics: The output window now shows the column where an error occurs. 자세한 내용은 C++ compiler diagnostics improvements in VS "15" Preview 5(VS "15" Preview 5의 C++ 컴파일러 진단 향상)를 참조하세요.For more information, see C++ compiler diagnostics improvements in VS "15" Preview 5.
  • 코루틴을 사용하는 경우 실험적인 yield( /await 옵션 아래에서 사용 가능) 키워드가 제거되었습니다.When using co-routines, the experimental keyword yield (available under the /await option) has been removed. 대신 co_yield를 사용하도록 코드를 업데이트해야 합니다.Your code should be updated to use co_yield instead. 자세한 내용은 yield keyword to become co_yield in VS 2017(VS 2017에서 yield 키워드가 co_yield로 변경됨)을 참조하세요.For more information, see yield keyword to become co_yield in VS 2017.
Visual Studio 2017 15.3 버전Visual Studio 2017 version 15.3

컴파일러에서 향상된 진단 추가 기능이 있습니다.Additional improvements to diagnostics in the compiler. 자세한 내용은 Visual Studio 2017 15.3.0에서 향상된 진단 기능(영문)을 참조하세요.For more information, see Diagnostic Improvements in Visual Studio 2017 15.3.0.

Visual Studio 2017 15.5 버전Visual Studio 2017 version 15.5

생성된 코드의 품질 향상으로 인해 Visual C++ 런타임 성능은 계속 개선되고 있습니다.Visual C++ runtime performance continues to improve due to better generated code quality. 이제 코드를 다시 컴파일하기만 하면 앱이 더 빠르게 실행됩니다.Now you can just recompile your code, and your app runs faster. 컴파일러 최적화 기능 중에는 조건부 스칼라 저장소의 벡터화, 호출 sin(x)cos(x)를 새로운 sincos(x)로 결합, SSA 최적화 프로그램을 통한 중복 명령 제거와 같이 완전히 새로운 기능이 있습니다.Some of the compiler optimizations are brand new, such as the vectorization of conditional scalar stores, the combining of calls sin(x) and cos(x) into a new sincos(x), and the elimination of redundant instructions from the SSA optimizer. 다른 컴파일러 최적화 기능으로는 조건식의 벡터화 도우미 추론, 더 나은 루프 최적화 및 부동 최소/최대 codegen과 같은 기존 기능에 대한 개선 사항이 있습니다.Other compiler optimizations are improvements to existing functionality, such as vectorizer heuristics for conditional expressions, better loop optimizations, and float min/max codegen. 링커에는 링크 시간 속도를 최대 9% 개선할 수 있는 새롭고 더욱 빠른 /OPT:ICF 구현이 있고, 증분 링크에는 다른 성능 개선 사항이 있습니다.The linker has a new and faster /OPT:ICF implementation, which can result in up to 9% link-time speedups, and there are other perf fixes in incremental linking. 자세한 내용은 /OPT(최적화)/INCREMENTAL(증분 링크)을 참조하세요.For more information, see /OPT (Optimizations) and /INCREMENTAL (Link Incrementally).

Microsoft C++ 컴파일러는 AVX-512의 새로운 기능을 128비트 및 256비트 차원의 레지스터로 가져오는 벡터 길이 명령을 포함하여 Intel의 AVX-512를 지원합니다.The Microsoft C++ compiler supports Intel's AVX-512, including the Vector Length instructions that bring new functions in AVX-512 to 128-bit and 256-bit wide registers.

전체적으로 C++17 모드를 사용 중일 때 /Zc:noexceptTypes- 옵션을 사용하여 noexcept의 C++14 버전으로 되돌릴 수 있습니다.The /Zc:noexceptTypes- option can be used to revert to the C++14 version of noexcept while using C++17 mode in general. 이 옵션을 사용하면 모든 throw() 코드를 동시에 다시 작성하지 않고도 C++17을 준수하도록 소스 코드를 업데이트할 수 있습니다.This option enables you to update your source code to conform to C++17 without having to rewrite all your throw() code at the same time. 자세한 내용은 동적 예외 사양 제거 및 noexcept를 참조하세요.For more information, see Dynamic exception specification removal and noexcept.

Visual Studio 2017 버전 15.7Visual Studio 2017 version 15.7

C++ 표준 라이브러리C++ standard library

정확성 향상Correctness Improvements

Visual Studio 2017 RTM(버전 15.0)Visual Studio 2017 RTM (version 15.0)
  • 사소한 basic_string _ITERATOR_DEBUG_LEVEL != 0 진단 기능 개선.Minor basic_string _ITERATOR_DEBUG_LEVEL != 0 diagnostics improvements. 문자열 조직에서 IDL 검사를 트립할 경우 그 트립이 일어나게 된 특정 동작이 보고됩니다.Tripping an IDL check in string machinery will now report the specific behavior that caused the trip. 예를 들어 "문자열 반복기를 역참조할 수 없음" 대신에 "범위(예: 끝 반복기) 밖에 있기 때문에 문자열 반복기를 역참조할 수 없음”이라는 메시지가 나타납니다.For example, instead of "string iterator not dereferencable" you'll get "cannot dereference string iterator because it is out of range (e.g. an end iterator)".
  • 이전에 코드가 영원히 잠기는 문제가 발생하던 std::promise 이동 할당 연산자가 해결되었습니다.Fixed the std::promise move assignment operator, which previously could cause code to block forever.
  • atomic<T*>T*로 암시적으로 변환할 때 발생하는 컴파일러 오류를 해결했습니다.Fixed compiler errors with the atomic<T*> implicit conversion to T*.
  • pointer_traits<Ptr>가 이제 Ptr::rebind<U>를 올바르게 검색합니다.pointer_traits<Ptr> now correctly detects Ptr::rebind<U>.
  • move_iterator 빼기 연산자에서 누락된 const 한정자를 수정했습니다.Fixed a missing const qualifier in the move_iterator subtraction operator.
  • propagate_on_container_copy_assignmentpropagate_on_container_move_assignment를 요청하는 상태 저장 사용자 정의 할당자의 silent bad codegen을 수정했습니다.Fixed silent bad codegen for stateful user-defined allocators requesting propagate_on_container_copy_assignment and propagate_on_container_move_assignment.
  • atomic<T>가 이제 오버로드된 operator&()를 허용합니다.atomic<T> now tolerates overloaded operator&().
  • 잘못된 bind() 호출에 대한 컴파일러 진단이 약간 개선되었습니다.Slightly improved compiler diagnostics for incorrect bind() calls.

Visual Studio 2017 RTM에서 향상된 표준 라이브러리 기능의 전체 목록은 C++ 팀 블로그 항목 Standard Library Fixes In VS 2017 RTM(VS 2017 RTM의 표준 라이브러리 수정)을 참조하세요.For a complete list of standard library improvements in Visual Studio 2017 RTM, see the C++ Team Blog entry Standard Library Fixes In VS 2017 RTM.

Visual Studio 2017 15.3 버전Visual Studio 2017 version 15.3
  • 표준 라이브러리 컨테이너는 이제 max_size()size_typemax()가 아닌 numeric_limits<difference_type>::max()로 제한합니다.Standard library containers now clamp their max_size() to numeric_limits<difference_type>::max() rather than the max() of size_type. 이 변경으로 인해 해당 컨테이너의 반복기에 대한 distance()의 결과를 distance()의 반환 형식으로 나타낼 수 있습니다.This change ensures that the result of distance() on iterators from that container is representable in the return type of distance().
  • 누락된 auto_ptr<void> 전문화가 수정되었습니다.Fixed missing specialization auto_ptr<void>.
  • 이전에는 length 인수가 정수 형식이 아닌 경우 for_each_n(), generate_n()search_n() 알고리즘을 컴파일하지 못했습니다. 이제는 정수 형식이 아닌 길이를 반복기의 difference_type으로 변환하려고 시도합니다.The for_each_n(), generate_n(), and search_n() algorithms previously failed to compile if the length argument was not an integral type; they now attempt to convert non-integral lengths to the iterators' difference_type.
  • normal_distribution<float>는 double에서 float로 좁히는 방법에 대한 경고를 표준 라이브러리 내부에서 더 이상 내보내지 않습니다.normal_distribution<float> no longer emits warnings inside the standard library about narrowing from double to float.
  • 최대 크기 오버플로를 확인할 때 max_size() 대신 npos를 사용한 일부 basic_string 연산이 수정되었습니다.Fixed some basic_string operations that used npos instead of max_size() when checking for maximum size overflow.
  • condition_variable::wait_for(lock, relative_time, predicate)는 의사 대기 모드 해제의 경우 전체 상대 시간 동안 대기합니다.condition_variable::wait_for(lock, relative_time, predicate) would wait for the entire relative time in the case of a spurious wake. 이제는 상대 시간의 단일 간격 동안만 대기합니다.Now it will wait for only a single interval of the relative time.
  • future::get()은 표준에 필요한 만큼 future를 무효화합니다.future::get() now invalidates the future, as the standard requires.
  • iterator_traits<void *>void&를 형성하려고 시도했기 때문에 하드 오류였습니다. 이제는 "is iterator" SFINAE 조건에서 iterator_traits를 사용할 수 있도록 완전하게 빈 구조체가 됩니다.iterator_traits<void *> used to be a hard error because it attempted to form void&; it now cleanly becomes an empty struct to allow use of iterator_traits in "is iterator" SFINAE conditions.
  • Clang -Wsystem-headers에서 보고된 일부 경고가 수정되었습니다.Some warnings reported by Clang -Wsystem-headers were fixed.
  • Clang -Wmicrosoft-exception-spec에서 보고된 "선언의 예외 사양이 이전 선언과 일치하지 않습니다."도 수정되었습니다.Also fixed "exception specification in declaration does not match previous declaration" reported by Clang -Wmicrosoft-exception-spec.
  • Clang과 C1XX에서 보고된 mem-initializer-list 순서 지정 경고도 수정되었습니다.Also fixed mem-initializer-list ordering warnings reported by Clang and C1XX.
  • 순서가 지정되지 않은 컨테이너는 컨테이너 자체가 교환될 때 해시 함수 또는 조건자를 교환하지 않았습니다.The unordered containers didn't swap their hash functions or predicates when the containers themselves were swapped. 이제는 교환합니다.Now they do.
  • 표준 라이브러리에서 non-propagate_on_container_swap(정의되지 않은 non-equal-allocator 동작 조건)을 검색할 때 예외를 throw하지 않으므로 이제 많은 컨테이너 교환 작업이 noexcept로 표시됩니다.Many container swap operations are now marked noexcept (as our standard library never intends to throw an exception when detecting the non-propagate_on_container_swap non-equal-allocator undefined behavior condition).
  • 많은 vector<bool> 연산이 이제 noexcept로 표시됩니다.Many vector<bool> operations are now marked noexcept.
  • 이제 표준 라이브러리에서 옵트아웃 이스케이프 해치와 일치하는 value_type 할당자(C++17 모드)를 적용합니다.The standard library will now enforce matching allocator value_type (in C++17 mode) with an opt-out escape hatch.
  • basic_string에 대한 self-range-insert에서 문자열의 내용이 뒤섞이는 일부 조건이 수정되었습니다.Fixed some conditions where self-range-insert into basic_string would scramble the strings contents. (참고: 벡터에 대한 self-range-insert는 여전히 표준 라이브러리에서 금지됩니다.)(Note: self-range-insert into vectors is still prohibited by the Standard.)
  • basic_string::shrink_to_fit()는 더 이상 할당자 propagate_on_container_swap의 영향을 받지 않습니다.basic_string::shrink_to_fit() is no longer affected by the allocator's propagate_on_container_swap.
  • 이제 std::decay에서 정규화된 cv 함수 형식, 정규화된 ref 함수 형식 등의 끔찍한 함수 형식을 처리합니다.std::decay now handles abominable function types, that is, function types that are cv-qualified and/or ref-qualified.
  • include 지시문에서 적절한 대/소문자 구분과 슬래시를 사용하도록 변경하여 이식성이 향상되었습니다.Changed include directives to use proper case sensitivity and forward slashes, improving portability.
  • 경고 C4061 "열거형 'enumeration'의 switch에 있는 'enumerator' 열거자는 case 레이블에 의해 명시적으로 처리되지 않습니다."가 수정되었습니다.Fixed warning C4061 "enumerator 'enumerator' in switch of enum 'enumeration' is not explicitly handled by a case label". 이 경고는 기본적으로 꺼져 있으며, 표준 라이브러리 일반 경고 정책의 예외로 수정되었습니다.This warning is off-by-default and was fixed as an exception to the standard library's general policy for warnings. 표준 라이브러리는 /W4 경고 수준을 유지하되, /Wall 경고 수준까지는 시도하지 않습니다.(The standard library is /W4 clean, but doesn't attempt to be /Wall clean. 기본적으로 꺼져 있는 대부분의 경고는 매우 번거로우며, 일반적으로 사용하기 위한 것이 아닙니다.Many off-by-default warnings are extremely noisy, and aren't intended to be used on a regular basis.)
  • std::list 디버그 검사가 향상되었습니다.Improved std::list debug checks. 이제는 목록 반복기에서 operator->()를 검사하고, list::unique()에서는 반복기를 무효화된(invalidated) 것으로 표시합니다.List iterators now check operator->(), and list::unique() now marks iterators as invalidated.
  • tuple의 use-allocator 메타 프로그래밍이 수정되었습니다.Fixed uses-allocator metaprogramming in tuple.
Visual Studio 2017 15.5 버전Visual Studio 2017 version 15.5
  • std::partition은 이제 표준의 요구 사항에 따라 조건자를 N + 1회 대신 N회 호출합니다.std::partition now calls the predicate N times instead of N + 1 times, as the standard requires.
  • 버전 15.3에서 매직 정적 이름을 방지하려는 시도가 버전 15.5에서 복구되었습니다.Attempts to avoid magic statics in version 15.3 have been repaired in version 15.5.
  • std::atomic<T>는 더 이상 T를 구성 가능한 기본값으로 요구하지 않습니다.std::atomic<T> no longer requires T to be default constructible.
  • 로그 시간을 사용하는 힙 알고리즘은 반복기 디버깅이 활성화되었을 때 사실상 입력이 힙인 선형 시간 어설션을 더 이상 수행하지 않습니다.Heap algorithms that take logarithmic time no longer do a linear time assertion that the input is in fact a heap when iterator debugging is enabled.
  • 이제 __declspec(allocator)는 이러한 declspec를 인식하지 않는 Clang의 경고를 방지하기 위해 C1XX에서만 보호됩니다.__declspec(allocator) is now guarded for C1XX only, to prevent warnings from Clang, which doesn't understand this declspec.
  • basic_string::npos는 이제 컴파일 시간 상수로 사용할 수 있습니다.basic_string::npos is now available as a compile time constant.
  • C++17 모드에서 std::allocator는 이제 alignment가 max_align_t보다 큰 over-aligned types - types 할당을 올바르게 처리합니다( /Zc:alignedNew- 로 비활성화되지 않은 경우에 한함).std::allocator in C++17 mode now properly handles allocation of over-aligned types, that is, types whose alignment is greater than max_align_t, unless disabled by /Zc:alignedNew-. 예를 들어 16바이트 또는 32바이트 맞춤이 있는 개체의 벡터가 이제 SSE 및 AVX 명령에 맞게 올바르게 맞춰집니다.For example, vectors of objects with 16-byte or 32-byte alignment are now properly aligned for SSE and AVX instructions.

규칙 향상Conformance improvements

  • <any>, <string_view>, apply(), make_from_tuple()을 추가했습니다.We added <any>, <string_view>, apply(), make_from_tuple().
  • <optional>, <variant>, shared_ptr::weak_type 및 <cstdalign>을 추가했습니다.Added <optional>, <variant>, shared_ptr::weak_type, and <cstdalign>.
  • min(initializer_list), max(initializer_list), minmax(initializer_list), min_element(), max_element(), minmax_element()에서 C++14 constexpr을 사용하도록 설정했습니다.Enabled C++14 constexpr in min(initializer_list), max(initializer_list), and minmax(initializer_list), and min_element(), max_element(), and minmax_element().

자세한 내용은 Visual C++ 언어 규칙을 참조하세요.For more information, see Visual C++ language conformance.

Visual Studio 2017 15.3 버전Visual Studio 2017 version 15.3
  • 몇 가지 C++17 추가 기능이 구현되었습니다.Several additional C++17 features have been implemented. 자세한 내용은 Visual C++ 언어 규칙을 참조하세요.For more information, see Visual C++ Language Conformance.
  • 구현된 P0602R0 "variant 및 optional에서 복사/이동 사소성(triviality)을 전파해야 합니다".Implemented P0602R0 "variant and optional should propagate copy/move triviality".
  • 이제 표준 라이브러리에서 /GR- 옵션을 통해 동적 RTTI를 해제할 수 있도록 공식적으로 허용합니다.The standard library now officially tolerates dynamic RTTI being disabled via the /GR- option. dynamic_pointer_cast()rethrow_if_nested()는 둘 다 기본적으로 dynamic_cast가 필요하므로 표준 라이브러리에서 이제 /GR- 아래에 =delete로 표시됩니다.Both dynamic_pointer_cast() and rethrow_if_nested() inherently require dynamic_cast, so the standard library now marks them as =delete under /GR-.
  • 동적 RTTI가 /GR- 을 통해 해제된 경우에도 typeid(SomeType) 양식의 “정적 RTTI”는 계속 사용할 수 있으며, 몇 가지 표준 라이브러리 구성 요소를 지원합니다.Even when dynamic RTTI has been disabled via /GR-, "static RTTI" in the form of typeid(SomeType) is still available, and powers several standard library components. 이제 표준 라이브러리에서 /D_HAS_STATIC_RTTI=0을 통해 이 기능도 해제할 수 있도록 지원합니다.The standard library now supports disabling this feature too, via /D_HAS_STATIC_RTTI=0. 이 플래그는 std::functionstd::any, target()target_type() 멤버 함수와 std::shared_ptrstd::weak_ptrget_deleter() friend 멤버 함수도 사용하지 않도록 설정합니다.This flag also disables std::any, the target() and target_type() member functions of std::function, and the get_deleter() friend member function of std::shared_ptr and std::weak_ptr.
  • 이제 표준 라이브러리에서 조건부로 정의된 매크로 대신 C++14 constexpr을 무조건 사용합니다.The standard library now uses C++14 constexpr unconditionally, instead of conditionally defined macros.
  • 이제 표준 라이브러리에서 별칭 템플릿을 내부적으로 사용합니다.The standard library now uses alias templates internally.
  • 이제 표준 라이브러리에서 nullptr_t{} 대신 nullptr을 내부적으로 사용합니다.The standard library now uses nullptr internally, instead of nullptr_t{}. (NULL의 내부 사용은 완전히 금지되었습니다.(Internal usage of NULL has been eradicated. 0-as-null의 내부 사용은 점차적으로 정리되고 있습니다.)Internal usage of 0-as-null is being cleaned up gradually.)
  • 이제 표준 라이브러리에서 std::forward()를 잘못된 스타일로 사용하는 대신 std::move()를 내부적으로 사용합니다.The standard library now uses std::move() internally, instead of stylistically misusing std::forward().
  • static_assert(false, "message")을(를) #error message(으)로 변경했습니다.Changed static_assert(false, "message") to #error message. 이 변경으로 인해 #error에서 컴파일을 즉시 중지하기 때문에 컴파일러 진단이 향상됩니다.This change improves compiler diagnostics because #error immediately stops compilation.
  • 표준 라이브러리에서 더 이상 함수를 __declspec(dllimport)로 표시하지 않습니다.The standard library no longer marks functions as __declspec(dllimport). 최신 링커 기술에서는 이 선언자가 더 이상 필요하지 않습니다.Modern linker technology no longer requires it.
  • SFINAE가 기본 템플릿 인수로 추출되어 반환 형식 및 함수 인수 형식에 비해 간단하게 표시됩니다.Extracted SFINAE to default template arguments, which reduced clutter compared to return types and function argument types.
  • 이제 <random>의 디버그 검사에서 fputs()stderr로 호출한 내부 함수 _Rng_abort() 대신 표준 라이브러리의 일반 동작을 사용합니다.Debug checks in <random> now use the standard library's usual machinery, instead of the internal function _Rng_abort() which called fputs() to stderr. 이 함수의 구현은 이진 호환성을 위해 유지되지만, 이진 방식으로 호환되지 않는 다음 버전의 표준 라이브러리에서는 제거되었습니다.This function's implementation is being retained for binary compatibility, but has been removed in the next binary-incompatible version of the standard library.
Visual Studio 2017 15.5 버전Visual Studio 2017 version 15.5
  • C++17 표준에 따라 몇 가지 표준 라이브러리 기능이 추가, 사용 중단 또는 제거되었습니다.Several standard library features have been added, deprecated, or removed in accordance with the C++17 standard. 자세한 내용은 Visual Studio의 C++ 규칙 향상을 참조하세요.For more information, see C++ conformance improvements in Visual Studio.
  • 다음과 같은 병렬 알고리즘에 대 한 실험적 지원:Experimental support for the following parallel algorithms:
    • all_of
    • any_of
    • for_each
    • for_each_n
    • none_of
    • reduce
    • replace
    • replace_if
    • sort
  • 다음과 같은 병렬 알고리즘에 대한 서명이 추가되었지만 현재는 병렬화되어 있지 않으므로 요소를 이동하거나 변경하기만 하는 병렬화 알고리즘에서는 아무 유익이 없는 것으로 나타났습니다.The signatures for the following parallel algorithms are added but not parallelized at this time; profiling showed no benefit in parallelizing algorithms that only move or permute elements:
    • copy
    • copy_n
    • fill
    • fill_n
    • move
    • reverse
    • reverse_copy
    • rotate
    • rotate_copy
    • swap_ranges
Visual Studio 2017 버전 15.6Visual Studio 2017 version 15.6
  • <memory_resource><memory_resource>
  • 라이브러리 기본 사항 V1Library Fundamentals V1
  • polymorphic_allocator 할당 삭제Deleting polymorphic_allocator assignment
  • 클래스 템플릿 인수 추론 향상Improving class template argument deduction
Visual Studio 2017 버전 15.7Visual Studio 2017 version 15.7
  • 병렬 알고리즘 지원은 더 이상 실험적 지원이 아님Support for parallel algorithms is no longer experimental
  • <filesystem>의 새로운 구현A new implementation of <filesystem>
  • 기본 문자열 변환(부분)Elementary string conversions (partial)
  • std::launder()
  • std::byte
  • hypot(x,y,z)
  • 불필요한 decay 방지Avoiding unnecessary decay
  • 수학 특수 함수Mathematical special functions
  • constexpr char_traits
  • 표준 라이브러리에 대한 추론 가이드Deduction guides for the standard library

자세한 내용은 Visual C++ 언어 규칙을 참조하세요.For more information, see Visual C++ language conformance.

성능 및 처리량 수정Performance and throughput fixes

  • basic_string::find(char) 오버로드가 traits::find를 한 번만 호출하도록 수정되었습니다.Made basic_string::find(char) overloads only call traits::find once. 이전에는 길이가 1인 문자열의 일반 문자열 검색으로 구현되었습니다.Previously, it was implemented as a general string search for a string of length 1.
  • 이제 basic_string::operator==에서 문자열 내용을 비교하기 전에 문자열 크기를 확인합니다.basic_string::operator== now checks the string's size before comparing the strings' contents.
  • basic_string에서 컴파일러 최적화 프로그램을 통해 분석하기 어려운 컨트롤 결합이 제거되었습니다.Removed control coupling in basic_string, which was difficult for the compiler optimizer to analyze. 짧은 문자열에 대해 reserve를 호출하는 경우 아무 효과도 없이 여전히 비용이 듭니다.For all short strings, calling reserve still has a nonzero cost to do nothing.
  • std::vector의 정확성과 성능이 철저히 점검되었습니다. 이제 삽입/대입 작업 중에 앨리어싱이 표준에 따라 올바르게 처리되고, 표준에서 요구되는 경우 강력한 예외 보장이 move_if_noexcept() 및 기타 논리를 통해 제공되며, 삽입/대입에서 더 적은 요소 작업을 수행합니다.std::vector has been overhauled for correctness and performance: aliasing during insert and emplace operations is now correctly handled as required by the Standard, the strong exception guarantee is now provided when required by the Standard via move_if_noexcept() and other logic, and insert and emplace perform fewer element operations.
  • 이제 C++ 표준 라이브러리에서 가상의 null 포인터를 역참조하지 못하도록 방지합니다.The C++ standard library now avoids dereferencing null fancy pointers.
  • weak_ptr::lock() 성능이 향상되었습니다.Improved weak_ptr::lock() performance.
  • 컴파일러 처리량을 늘리기 위해 이제 C++ 표준 라이브러리 헤더에서 불필요한 컴파일러 내장 함수의 선언이 포함되지 않도록 방지합니다.To increase compiler throughput, C++ standard library headers now avoid including declarations for unnecessary compiler intrinsics.
  • std::stringstd::wstring 이동 생성자 성능이 3배 넘게 향상되었습니다.Improved the performance of std::string and std::wstring move constructors by more than three times.
Visual Studio 2017 15.3 버전Visual Studio 2017 version 15.3
  • SEH(구조적 예외 처리)를 사용하는 함수로 std::atomic의 구현을 인라인하지 못하게 했던 noexcept와의 상호 작용이 해결되었습니다.Worked around interactions with noexcept which prevented inlining the std::atomic implementation into functions that use Structured Exception Handling (SEH).
  • 표준 라이브러리의 내부 _Deallocate() 함수가 더 작은 코드로 최적화되어 더 많은 위치에 인라인될 수 있도록 변경되었습니다.Changed the standard library's internal _Deallocate() function to optimize into smaller code, allowing it to be inlined into more places.
  • 재귀 대신 팩 확장을 사용하도록 std::try_lock()이 변경되었습니다.Changed std::try_lock() to use pack expansion instead of recursion.
  • 모든 잠금의 std::lock()에서 회전하는 대신 lock() 연산을 사용하도록 try_lock() 교착 상태 방지 알고리즘이 향상되었습니다.Improved the std::lock() deadlock avoidance algorithm to use lock() operations instead of spinning on try_lock() on all the locks.
  • system_category::message()에서 명명된 반환 값 최적화가 활성화되었습니다.Enabled the Named Return Value Optimization in system_category::message().
  • conjunctiondisjunction은 이제 2N + 2 형식 대신 N + 1 형식을 인스턴스화합니다.conjunction and disjunction now instantiate N + 1 types, instead of 2N + 2 types.
  • std::function에서는 std::function으로 많은 고유 람다를 전달하는 프로그램에서 처리량을 향상시키고 obj 크기를 줄임으로써 더 이상 각 type-erased 호출 가능 코드에 대한 할당자 지원 기계를 인스턴스화하지 않습니다.std::function no longer instantiates allocator support machinery for each type-erased callable, improving throughput and reducing .obj size in programs that pass many distinct lambdas to std::function.
  • allocator_traits<std::allocator>에는 std::allocator부터 allocator_traits까지만 상호 작용하는 코드에서(즉, 대부분의 코드에서) 코드 크기를 줄이는, 수동으로 인라인된 std::allocator 연산이 포함됩니다.allocator_traits<std::allocator> contains manually inlined std::allocator operations, reducing code size in code that interacts with std::allocator through allocator_traits only (that is, in most code).
  • 이제 표준 라이브러리에서 내부 클래스 _Wrap_alloc에 할당자를 래핑하는 대신 allocator_traits를 직접 호출하여 C++11 최소 할당자 인터페이스를 처리합니다.The C++11 minimal allocator interface is now handled by the standard library calling allocator_traits directly, instead of wrapping the allocator in an internal class _Wrap_alloc. 이 변경으로 인해 할당자 지원을 위해 생성되는 코드의 크기가 줄어들고, 경우에 따라 표준 라이브러리 컨테이너에 대해 추론할 수 있는 최적화 프로그램의 기능이 향상되며, 더 효율적인 디버깅 환경이 제공됩니다(이제 디버거에서 _Wrap_alloc<your_allocator_type> 대신 할당자 유형이 표시됨).This change reduces the code size generated for allocator support, improves the optimizer's ability to reason about standard library containers in some cases, and provides a better debugging experience (as now you see your allocator type, rather than _Wrap_alloc<your_allocator_type> in the debugger).
  • 할당자를 실제로 사용자 지정할 수 없는 사용자 지정 allocator::reference에 대한 메타 프로그래밍이 제거되었습니다.Removed metaprogramming for customized allocator::reference, which allocators aren't actually allowed to customize. (할당자는 컨테이너에서 고급 참조가 아니라 고급 포인터를 사용하도록 만들 수 있습니다.)(Allocators can make containers use fancy pointers but not fancy references.)
  • 컴파일러 프런트 엔드에 범위 기반 for 루프의 디버그 반복기를 래핑 해제하도록 지시하여 디버그 빌드의 성능이 향상되었습니다.The compiler front end was taught to unwrap debug iterators in range-based for loops, improving the performance of debug builds.
  • shrink_to_fit()reserve()에 대한 basic_string의 내부 축소 경로는 더 이상 재할당 작업의 경로에 있지 않으므로 모든 변경 멤버에 대한 코드 크기가 줄어듭니다.The basic_string internal shrink path for shrink_to_fit() and reserve() is no longer in the path of reallocating operations, reducing code size for all mutating members.
  • basic_string 내부 증가 경로가 더 이상 shrink_to_fit() 경로에 없습니다.The basic_string internal grow path is no longer in the path of shrink_to_fit().
  • basic_string의 변경 작업은 이제 할당되지 않은 빠른 경로와 할당된 느린 경로 함수에 팩터링되어 기능이 할당되므로 일반적인 재할당되지 않은 case가 호출자에 인라인될 가능성이 높아집니다.The basic_string mutating operations are now factored into non-allocating fast path and allocating slow path functions, making it more likely for the common no-reallocate case to be inlined into callers.
  • basic_string의 변형 작업은 이제 크기를 조정하는 대신 원하는 상태로 재할당된 버퍼를 구성합니다.The basic_string mutating operations now construct reallocated buffers in the desired state rather than resizing in place. 예를 들어 문자열의 시작에 삽입하면 이제는 재할당될 case에 두 번(새로 할당된 버퍼로, 그 다음에 아래로) 삽입하는 것이 아니라 정확히 한 번만(아래로 또는 새로 할당된 버퍼로) 삽입한 후의 내용을 이동합니다.For example, inserting at the beginning of a string now moves the content after the insertion exactly once (either down or to the newly allocated buffer), instead of twice in the reallocating case (to the newly allocated buffer and then down).
  • <string>에서 C 표준 라이브러리를 호출하는 작업은 이제 errno의 주소를 캐시하여 TLS와의 반복된 상호 작용을 제거합니다.Operations calling the C standard library in <string> now cache the errno address to remove repeated interaction with TLS.
  • is_pointer 구현이 간소화되었습니다.Simplified the is_pointer implementation.
  • 함수 기반 식 SFINAE가 structvoid_t 기반으로 변경되었습니다.Finished changing function-based Expression SFINAE to struct and void_t-based.
  • 이제 표준 라이브러리 알고리즘에서 반복기의 사후 증가를 방지합니다.Standard library algorithms now avoid postincrementing iterators.
  • 64비트 시스템에서 32비트 할당자를 사용할 때의 잘림 경고가 수정되었습니다.Fixed truncation warnings when using 32-bit allocators on 64-bit systems.
  • 이제는 가능한 경우 버퍼를 다시 사용하여 비POCMA non-equal-allocator case에서 std::vector 이동 할당이 더 효율적입니다.std::vector move assignment is now more efficient in the non-POCMA non-equal-allocator case, by reusing the buffer when possible.
Visual Studio 2017 15.5 버전Visual Studio 2017 version 15.5
  • basic_string<char16_t>에서는 이제 basic_string<wchar_t>이 참여하는 유사한 최적화 및 동일한 memcmp, memcpy에 참여합니다.basic_string<char16_t> now engages the same memcmp, memcpy, and similar optimizations that basic_string<wchar_t> engages.
  • 함수 포인터가 인라인되지 않도록 하는 최적화 프로그램의 제한 사항(Visual Studio 2015 업데이트 3의 “함수 복사 방지” 작업에 의해 공개됨)이 해결되어 lower_bound(iter, iter, function pointer)의 성능이 복원되었습니다.An optimizer limitation that prevented function pointers from being inlined, exposed by our "avoid copying functions" work in Visual Studio 2015 Update 3, has been worked around, restoring performance of lower_bound(iter, iter, function pointer).
  • 순서 확인 전 반복기의 래핑을 해제하여 반복기 디버깅의 includes, set_difference, set_symmetric_differenceset_union 입력 순서 확인 오버헤드를 줄였습니다.The overhead of iterator debugging's order verification of inputs to includes, set_difference, set_symmetric_difference, and set_union was reduced by unwrapping iterators before checking order.
  • 이제 std::inplace_merge는 이미 제자리에 있는 요소를 건너뜁니다.std::inplace_merge now skips over elements that are already in position.
  • std::random_device를 생성해도 더 이상 std::string이 생성된 후 파괴되지 않습니다.Constructing std::random_device no longer constructs and then destroys a std::string.
  • std::equalstd::partition에는 반복기 비교가 필요 없는 점프 스레딩 최적화 패스가 있었습니다.std::equal and std::partition had a jump-threading optimization pass that saves an iterator comparison.
  • std::reverse가 일반적으로 복사 가능한 T에 포인터를 전달받으면 이제 직접 작성한 벡터화된 구현으로 디스패치합니다.When std::reverse is passed pointers to trivially copyable T, it will now dispatch to a handwritten vectorized implementation.
  • std::fill, std::equalstd::lexicographical_compare은(는) std::bytegsl::byte(및 기타 char과 유사한 열거형 및 열거형 클래스)의 memsetmemcmp(으)로 디스패치하는 방법을 지시받았습니다.std::fill, std::equal, and std::lexicographical_compare were taught how to dispatch to memset and memcmp for std::byte and gsl::byte (and other char-like enums and enum classes). std::copyis_trivially_copyable을 사용하여 디스패치되므로 변경이 필요하지 않았습니다.Since std::copy dispatches using is_trivially_copyable, it didn't need any changes.
  • 표준 라이브러리는 더 이상 형식을 non-trivially-destructible로 만드는 동작만 수행하는 empty-braces 소멸자를 포함하지 않습니다.The standard library no longer contains empty-braces destructors whose only behavior was to make types non-trivially-destructible.

기타 라이브러리Other Libraries

오픈 소스 라이브러리 지원Open-source library support

vcpkg는 오픈 소스 명령줄 도구로, Visual Studio에서 오픈 소스 C++ 정적 라이브러리와 DLL을 얻고 빌드하는 프로세스를 훨씬 간소화합니다.Vcpkg is an open-source command-line tool that greatly simplifies the process of acquiring and building open-source C++ static libs and DLLS in Visual Studio. 자세한 내용은 vcpkg: C++용 패키지 관리자를 참조하세요.For more information, see vcpkg: A package manager for C++.

CPPRest SDK 2.9.0CPPRest SDK 2.9.0

Visual Studio 2017 15.5 버전Visual Studio 2017 version 15.5

C++용 플랫폼 간 웹 API인 CPPRestSDK가 버전 2.9.0으로 업데이트되었습니다.The CPPRestSDK, a cross-platform web API for C++, has been updated to version 2.9.0. 자세한 내용은 CppRestSDK 2.9.0 is available on GitHub(GitHub에서 CppRestSDK 2.9.0을 사용할 수 있음)를 참조하세요.For more information, see CppRestSDK 2.9.0 is available on GitHub.

ATLATL

Visual Studio 2017 15.5 버전Visual Studio 2017 version 15.5
  • 이름 조회 규칙의 다른 설정 수정Yet another set of name-lookup conformance fixes
  • 기존 이동 생성자 및 이동 할당 연산자가 이제 throw되지 않음으로 제대로 표시됨Existing move constructors and move assignment operators are now properly marked as non-throwing
  • atlstr.h에서 스레드로부터 안전한 로컬 정적 초기화에 대한 유효한 경고 C4640 표시Unsuppress valid warning C4640 about thread safe init of local statics in atlstr.h
  • ATL을 사용하여 DLL을 빌드할 때 XP 도구 집합에서 스레드로부터 안전한 로컬 정적 초기화가 자동으로 꺼졌는데 이제 꺼지지 않습니다.Thread-safe initialization of local statics was automatically turned off in the XP toolset when using ATL to build a DLL, but now it's not. 스레드로부터 안전한 초기화를 끄려는 경우 프로젝트 설정에 /Zc:threadSafeInit- 를 추가할 수 있습니다.You can add /Zc:threadSafeInit- in your Project settings if having thread-safe initialization off is desired.

Visual C++ 런타임Visual C++ runtime

  • 제어 흐름 보호 기호에 대한 새 헤더 "cfguard.h".New header "cfguard.h" for Control Flow Guard symbols.

C++ IDEC++ IDE

  • 이제 구성 변경 성능이 C++ 네이티브 프로젝트의 경우 향상되었고, C++/CLI 프로젝트의 경우 훨씬 더 향상되었습니다.Configuration change performance is now better for C++ native projects and much better for C++/CLI projects. 이제 처음으로 활성화될 때 솔루션 구성이 더 빠르고, 이 솔루션 구성의 모든 이후 활성화는 거의 즉시 이루어집니다.When a solution configuration is activated for the first time, it will now be faster, and all later activations of this solution configuration will be almost instantaneous.
Visual Studio 2017 15.3 버전Visual Studio 2017 version 15.3
  • 여러 가지 프로젝트 및 코드 마법사가 시그니처 대화 상자 스타일로 다시 작성되었습니다.Several project and code wizards have been rewritten in the signature dialog style.
  • 이제 클래스 추가를 선택하면 [클래스 추가] 마법사가 직접 시작됩니다.Add Class now launches the Add Class wizard directly. 이전에 여기에 있던 다른 모든 항목은 이제 추가 > 새 항목에서 사용할 수 있습니다.All of the other items that were previously here are now available under Add > New Item.
  • Win32 프로젝트는 이제 새 프로젝트 대화 상자의 Windows 데스크톱 범주 아래에 있습니다.Win32 projects are now under the Windows Desktop category in the New Project dialog.
  • 이제 Windows 콘솔데스크톱 애플리케이션 템플릿은 마법사를 표시하지 않고 프로젝트를 만듭니다.The Windows Console and Desktop Application templates now create the projects without displaying a wizard. 이전의 Win32 콘솔 애플리케이션 마법사와 같은 옵션을 표시하는 동일한 범주 아래에는 새로운 Windows 데스크톱 마법사가 있습니다.There's a new Windows Desktop Wizard under the same category that displays the same options as the old Win32 Console Application wizard.
Visual Studio 2017 15.5 버전Visual Studio 2017 version 15.5

리팩터링 및 코드 탐색에 IntelliSense 엔진을 사용하는 일부 C++ 작업은 훨씬 더 빨리 실행됩니다.Several C++ operations that use the IntelliSense engine for refactoring and code navigation run much faster. 다음 값은 3500개 프로젝트가 있는 Visual Studio Chromium 솔루션을 기준으로 합니다.The following numbers are based on the Visual Studio Chromium solution with 3500 projects:

기능Feature 성능 향상Performance Improvement
이름 바꾸기Rename 5.3배5.3x
시그니처 변경Change Signature 4.5배4.5x
모든 참조 찾기Find All References 4.7배4.7x

C++는 이제 Ctrl+Click Go To Definition을 지원하여 정의에 대한 마우스 탐색을 쉽게 해줍니다.C++ now supports Ctrl+Click Go To Definition, making mouse navigation to definitions easy. Productivity Power Tools 팩의 구조 시각화 도우미도 이제 제품에 기본적으로 포함됩니다.The Structure Visualizer from the Productivity Power Tools pack is now also included in the product by default.

IntelliSenseIntelliSense

  • 이제 새 SQLite 기반 데이터베이스 엔진이 기본적으로 사용됩니다.The new SQLite-based database engine is now being used by default. 이 엔진은 정의로 이동(Go To Definitions) , 모든 참조 찾기(Find All References) 같은 데이터베이스 작업의 속도를 높이고 초기 솔루션 구문 분석 시간을 크게 개선합니다.This will speed up database operations like Go To Definition and Find All References, and will significantly improve initial solution parse time. 해당 설정이 도구 > 옵션 > 텍스트 편집기 > C/C++ > 고급(이전에는 ...C/C++ | 실험적에 있었음)으로 이동되었습니다.The setting has been moved to Tools > Options > Text Editor > C/C++ > Advanced (it was formerly under ...C/C++ | Experimental).

  • 미리 컴파일된 헤더를 사용하지 않는 프로젝트 및 파일에 대한 IntelliSense 성능이 향상되었습니다. 현재 파일의 헤더에 대해 자동 미리 컴파일된 헤더가 생성됩니다.We've improved IntelliSense performance on projects and files not using precompiled headers - an Automatic Precompiled Header will be created for headers in the current file.

  • IntelliSense 오류에 대한 오류 필터링 및 도움말이 오류 목록에 추가되었습니다.We've added error filtering and help for IntelliSense errors in the error list. 이제 오류 열을 클릭하여 필터링할 수 있습니다.Clicking on the error column now allows for filtering. 또한 특정 오류를 클릭하거나 F1 키를 누르면 오류 메시지에 대한 온라인 검색이 시작됩니다.Also, clicking on the specific errors or pressing F1 will launch an online search for the error message.

    오류 목록Error List

    오류 목록 필터링Error List Filtered

  • 멤버 목록 항목을 종류별로 필터링하는 기능이 추가되었습니다.Added the ability to filter Member List items by kind.

    멤버 목록 필터링Member List Filtering

  • 멤버 목록에 나타나는 항목의 컨텍스트 인식 필터링을 제공하는 새로운 실험적 예측 IntelliSense 기능이 추가되었습니다.Added a new experimental Predictive IntelliSense feature that provides contextually aware filtering of what appears in the Member List. 자세한 내용은 C++ IntelliSense Improvements – Predictive IntelliSense & Filtering(C++ IntelliSense 향상 – 예측 IntelliSense 및 필터링)을 참조하세요.For more information, see C++ IntelliSense Improvements - Predictive IntelliSense & Filtering.

  • 이제 모든 참조 찾기(Shift+F12)를 사용하여 복잡한 코드베이스에서도 쉽게 탐색할 수 있습니다.Find All References (Shift+F12) now helps you get around easily, even in complex codebases. 고급 그룹화, 필터링, 정렬, 결과 내 검색 및 (일부 언어의 경우) 색 지정이 제공되므로 참조를 명확하게 이해할 수 있습니다.It provides advanced grouping, filtering, sorting, searching within results, and (for some languages) colorization, so you can get a clear understanding of your references. C++의 경우 새로운 UI에 변수에서 읽고 있는지 아니면 변수에 쓰고 있는지에 대한 정보가 포함되어 있습니다.For C++, the new UI includes information about whether we're reading from or writing to a variable.

  • IntelliSense 점-화살표 기능이 실험적에서 고급으로 옮겨졌고 이제 기본적으로 사용됩니다.The Dot-to-Arrow IntelliSense feature has been moved from experimental to advanced, and is now enabled by default. 편집기 기능인 범위 확장우선 순위 확장도 실험적에서 고급으로 옮겨졌습니다.The editor features Expand Scopes and Expand Precedence have also been moved from experimental to advanced.

  • 실험적 리팩터링 기능인 시그니처 변경함수 추출을 기본적으로 사용할 수 있습니다.The experimental refactoring features Change Signature and Extract Function are now available by default.

  • C++ 프로젝트에 대해 ‘빠른 프로젝트 로드’라는 실험적 기능이 추가되었습니다.Added an experimental 'Faster project load' feature for C++ projects. 다음에 C++ 프로젝트를 열 때 프로젝트가 더 빠르게 로드되고, 그 후에 프로젝트를 열 때는 ‘훨씬’ 더 빠르게 로드됩니다. The next time you open a C++ project it will load faster, and the time after that it will load much faster!

  • 이러한 기능 중 일부는 다른 언어에 공통적으로 적용되고, 일부는 C++에만 해당합니다.Some of these features are common to other languages, and some are specific to C++. 이러한 새로운 기능에 대한 자세한 내용은 Announcing Visual Studio “15” Preview 5(Visual Studio “15” 미리 보기 5 발표)를 참조하세요.For more information about these new features, see Announcing Visual Studio "15" Preview 5.

Visual Studio 2017 버전 15.7Visual Studio 2017 version 15.7

폴더 열기를 사용한 비 MSBuild 프로젝트에Non-MSBuild projects with Open Folder

Visual Studio 2017에서는 솔루션 또는 프로젝트를 만들 필요 없이 소스 코드가 포함된 폴더에서 코딩, 빌드 및 디버그할 수 있는 폴더 열기 기능이 도입되었습니다.Visual Studio 2017 introduces the Open Folder feature, which enables you to code, build and debug in a folder containing source code without the need to create any solutions or projects. 이제 프로젝트가 MSBuild 기반 프로젝트가 아니어도 Visual Studio를 훨씬 간단하게 시작할 수 있습니다.Now it's much simpler to get started with Visual Studio, even if your project isn't an MSBuild-based project. 폴더 열기를 사용하면 Visual Studio에서 MSBuild 프로젝트에 대해 이미 제공하는 강력한 코드 이해, 편집, 빌드 및 디버깅 기능에 액세스할 수 있습니다.With Open Folder, you get access to the powerful code understanding, editing, building, and debugging capabilities that Visual Studio already provides for MSBuild projects. 자세한 내용은 C++용 폴더 열기 프로젝트를 참조하세요.For more information, see Open Folder projects for C++.

  • 폴더 열기 환경이 개선되었습니다.Improvements to the Open Folder experience. 다음 json 파일을 통해 환경을 사용자 지정할 수 있습니다.You can customize the experience through these .json files:
    • IntelliSense 및 검색 환경을 사용자 지정할 수 있는 CppProperties.json.CppProperties.json to customize the IntelliSense and browsing experience.
    • 빌드 단계를 사용자 지정할 수 있는 Tasks.json.Tasks.json to customize the build steps.
    • 디버깅 환경을 사용자 지정할 수 있는 Launch.json.Launch.json to customize the debugging experience.
Visual Studio 2017 15.3 버전Visual Studio 2017 version 15.3
  • MinGW 및 Cygwin과 같은 대체 컴파일러 및 빌드 환경에 대한 지원이 향상되었습니다.Improved support for alternative compilers and build environments such as MinGW and Cygwin. 자세한 내용은 Visual C++ 및 폴더 열기에서 MinGW 및 Cygwin 사용(영문)을 참조하세요.For more information, see Using MinGW and Cygwin with Visual C++ and Open Folder.
  • CppProperties.json 및 CMakeSettings.json에서 전역 및 구성별 환경 변수를 정의하기 위한 지원이 추가되었습니다.Added support to define global and configuration-specific environment variables in CppProperties.json and CMakeSettings.json. 이러한 환경 변수는 launch.vs.json에 정의된 디버그 구성 및 tasks.vs.json의 작업에 사용될 수 있습니다.These environment variables can be consumed by debug configurations defined in launch.vs.json and tasks in tasks.vs.json. 자세한 내용은 Visual C++ 및 폴더 열기에서 환경 사용자 지정(영문)을 참조하세요.For more information, see Customizing your Environment with Visual C++ and Open Folder.
  • 64비트 플랫폼을 쉽게 대상으로 지정할 수 있는 기능을 포함하여 CMake의 닌자 생성기에 대한 지원이 향상되었습니다.Improved support for CMake's Ninja generator, including the ability to easily target 64-bit platforms.

폴더 열기를 사용한 CMake 지원CMake support via Open Folder

Visual Studio 2017에서는 MSBuild 프로젝트 파일(.vcxproj)로 변환하지 않고 CMake 프로젝트를 사용할 수 있는 지원이 도입되었습니다.Visual Studio 2017 introduces support for using CMake projects without converting to MSBuild project files (.vcxproj). 자세한 내용은 Visual Studio의 CMake 프로젝트를 참조하세요.For more information, see CMake projects in Visual Studio. 폴더 열기로 CMake 프로젝트를 여는 경우 C++ 편집, 빌드, 디버깅 환경이 자동으로 구성됩니다.Opening CMake projects with Open Folder automatically configures the environment for C++ editing, building and debugging.

  • C++ IntelliSense가 루트 폴더에 CppProperties.json 파일을 만들지 않아도 작동합니다.C++ IntelliSense works without the need to create a CppProperties.json file in the root folder. 사용자가 CMake 파일과 CppProperties.json 파일에서 제공하는 구성을 쉽게 전환할 수 있도록 새 드롭다운도 추가되었습니다.We've also added a new dropdown to allow users to easily switch between configurations provided by CMake and CppProperties.json files.

  • CMakeLists.txt 파일과 같은 폴더에 있는 CMakeSettings.json 파일을 통해 추가 구성이 지원됩니다.Further configuration is supported via a CMakeSettings.json file that sits in the same folder as the CMakeLists.txt file.

    Cmake 폴더 열기Cmake Open Folder

Visual Studio 2017 15.3 버전Visual Studio 2017 version 15.3
  • CMake Ninja 생성기에 대한 지원이 추가되었습니다.Support added for the CMake Ninja generator.
Visual Studio 2017 15.5 버전Visual Studio 2017 version 15.5
  • 기존 CMake 캐시 가져오기에 대한 지원이 추가되었습니다.Support added for importing existing CMake caches.
Visual Studio 2017 15.5 버전Visual Studio 2017 version 15.5

C++를 사용한 Windows 데스크톱 개발Windows desktop development with C++

이제 원래 C++ 워크로드에 대한 보다 세분화된 설치 환경이 제공됩니다.We now provide a more granular installation experience for installing the original C++ workload. 필요한 도구만 설치할 수 있도록 선택 가능한 구성 요소가 추가되었습니다.We have added selectable components that enable you to install just the tools that you need. 설치 관리자 UI에 나열된 구성 요소에 대해 표시된 설치 크기는 정확하지 않으며 전체 크기는 이보다 클 수 있습니다.The indicated installation sizes for the components listed in the installer UI aren't accurate, and underestimate the total size.

C++ 데스크톱 작업에서 Win32 프로젝트를 성공적으로 만들려면 도구 집합과 Windows SDK를 둘 다 설치해야 합니다.To successfully create Win32 projects in the C++ desktop workload, you must install both a toolset and a Windows SDK. 제대로 작동하도록 권장(선택된) 구성 요소 VC++ 2017 v141 도구 집합(x86, x64)Windows 10 SDK(10.0.nnnnn) 를 설치합니다.Install the recommended (selected) components VC++ 2017 v141 toolset (x86, x64) and Windows 10 SDK (10.0.nnnnn) to make sure it works. 필요한 도구가 설치되어 있지 않으면 프로젝트가 생성되지 않고 마법사가 중단됩니다.If the necessary tools aren't installed, projects will not be created successfully, and the wizard will hang.

Visual Studio 2017 15.5 버전Visual Studio 2017 version 15.5

Visual C++ 빌드 도구(이전에 독립 실행형 제품으로 제공)가 이제 Visual Studio 설치 관리자에 작업으로 포함됩니다.The Visual C++ Build tools (previously available as a standalone product) are now included as a workload in the Visual Studio Installer. 이 작업은 Visual Studio IDE를 설치하지 않고 C++ 프로젝트를 빌드하는 데 필요한 도구만 설치합니다.This workload installs only the tools required to build C++ projects without installing the Visual Studio IDE. V140 및 v141 도구 집합이 모두 포함됩니다.Both the v140 and v141 toolsets are included. v141 도구 집합에는 Visual Studio 2017 버전 15.5의 최신 향상 기능이 포함되어 있습니다.The v141 toolset contains the latest improvements in Visual Studio 2017 version 15.5. 자세한 내용은 Visual Studio Build Tools에 이제 VS2017 및 VS2015 MSVC 도구 집합 포함(영문)을 참조하세요.For more information, see Visual Studio Build Tools now include the VS2017 and VS2015 MSVC Toolsets.

C++를 사용한 Linux 개발Linux development with C++

일반적으로 사용되는 확장인 Linux 개발용 Visual C++가 Visual Studio에 포함됩니다.The popular extension Visual C++ for Linux Development is now part of Visual Studio. 이 설치는 Linux 환경에서 실행되는 C++ 애플리케이션을 개발 및 디버깅하는 데 필요한 모든 사항을 제공합니다.This installation provides everything you need to develop and debug C++ applications running on a Linux environment.

Visual Studio 2017 버전 15.2Visual Studio 2017 version 15.2

플랫폼 간 코드 공유 및 형식 시각화에 대한 기능이 향상되었습니다.Improvements have been made in cross-platform code sharing and type visualization. 자세한 내용은 플랫폼 간 코드 공유 및 형식 시각화에 대한 향상된 Linux C++ 기능을 참조하세요.For more information, see Linux C++ improvements for cross-platform code sharing and type visualization.

Visual Studio 2017 15.5 버전Visual Studio 2017 version 15.5
  • Linux 작업은 원격 Linux 컴퓨터에 파일을 동기화하는 sftp에 대한 대안으로 rsync 지원을 추가했습니다.The Linux workload has added support for rsync as an alternative to sftp for synchronizing files to remote Linux machines.
  • ARM 마이크로프로세서를 대상으로 하는 교차 컴파일을 위한 지원이 추가되었습니다.Support is added for cross compilation targeting ARM microcontrollers. 설치에서 사용하도록 설정하려면 C++를 사용한 Linux 개발 워크로드를 선택하고 포함 및 IoT 개발 옵션을 선택합니다.To enable it in the installation, choose the Linux development with C++ workload and select the option for Embedded and IoT Development. 이 옵션은 ARM GCC 크로스 컴파일 도구 및 CMake를 설치에 추가합니다.This option adds the ARM GCC cross compilation tools and Make to your installation. 자세한 내용은 Visual Studio의 ARM GCC 크로스 컴파일(영문)을 참조하세요.For more information, see ARM GCC Cross Compilation in Visual Studio.
  • CMake에 대한 지원이 추가되었습니다.Support added for CMake. 이제 CMake를 Visual Studio 프로젝트로 변환할 필요 없이 기존의 CMake 코드 베이스에서 작업할 수 있습니다.You can now work on your existing CMake code base without having to convert it to a Visual Studio project. 자세한 내용은 Linux CMake 프로젝트 구성을 참조하세요.For more information, see Configure a Linux CMake Project.
  • 원격 작업 실행에 대한 지원이 추가되었습니다.Support added for running remote tasks. 이 기능을 사용하면 Visual Studio의 연결 관리자에 정의된 원격 시스템에 명령을 실행할 수 있습니다.This capability allows you to run any command on a remote system that is defined in Visual Studio’s Connection Manager. 또한 원격 작업은 원격 시스템에 파일을 복사하는 기능을 제공합니다.Remote tasks also provide the capability to copy files to the remote system. 자세한 내용은 Linux CMake 프로젝트 구성을 참조하세요.For more information, see Configure a Linux CMake Project.
Visual Studio 2017 버전 15.7Visual Studio 2017 version 15.7

C++를 사용한 게임 개발Game development with C++

C++의 모든 기능을 사용하여 DirectX 또는 Cocos2d로 구동하는 전문 게임을 개발해 보세요.Use the full power of C++ to build professional games powered by DirectX or Cocos2d.

C++를 사용한 모바일 개발(Android 및 iOS)Mobile development with C++ (Android and iOS)

이제 Visual Studio를 사용하여 Android 및 iOS를 대상으로 할 수 있는 모바일 앱을 만들고 디버깅할 수 있습니다.You can now create and debug mobile apps using Visual Studio that can target Android and iOS.

유니버설 Windows 앱Universal Windows Apps

C++는 유니버설 Windows 앱 워크로드에 대한 선택적 구성 요소로 제공됩니다.C++ comes as an optional component for the Universal Windows App workload. 현재 C++ 프로젝트를 업그레이드하려면 수동으로 해야 합니다.Upgrading C++ projects currently must be done manually. Visual Studio 2017에서 v140을 대상으로 한 유니버설 Windows 플랫폼 프로젝트를 여는 경우, Visual Studio 2015가 설치되어 있지 않으면 프로젝트 속성 페이지에서 v141 플랫폼 도구 집합을 선택해야 합니다.If you open a v140-targeted Universal Windows Platform project in Visual Studio 2017, you need to select the v141 platform toolset in the project property pages if you don't have Visual Studio 2015 installed.

유니버설 Windows 플랫폼(UWP)의 C++에 대한 새로운 옵션New options for C++ on Universal Windows Platform (UWP)

이제 유니버설 Windows 플랫폼 및 Windows Store용 C++ 애플리케이션 작성 및 패키징에 대한 새 옵션이 제공됩니다. 사이드로드를 통한 기존 채널 또는 Windows 스토어를 통해 배포하기 위해 데스크톱 브리지 인프라를 사용하여 기존 데스크톱 애플리케이션 또는 COM 개체를 패키징할 수 있습니다.You now have new options for writing and packaging C++ applications for the Universal Windows Platform and the Windows Store: You can use the Desktop Bridge infrastructure to package your existing desktop application or COM object for deployment through the Windows Store or through your existing channels via side-loading. Windows 10의 새로운 기능을 사용하면 다양한 방법으로 데스크톱 애플리케이션에 UWP 기능을 추가할 수 있습니다.New capabilities in Windows 10 enable you to add UWP functionality to your desktop application in various ways. 자세한 내용은 데스크톱 브리지를 참조하세요.For more information, see Desktop Bridge.

Visual Studio 2017 15.5 버전Visual Studio 2017 version 15.5

데스크톱 브리지를 통해 데스크톱 애플리케이션 패키징을 훨씬 간소화하는 프로젝트 템플릿인 Windows 애플리케이션 패키징 프로젝트가 추가되었습니다.A Windows Application Packaging Project project template is added, which greatly simplifies packaging of desktop applications with Desktop Bridge. 파일 | 새로 만들기 | 프로젝트 | 설치됨 | Visual C++ | 유니버설 Windows 플랫폼에서 사용할 수 있습니다.It's available under File | New | Project | Installed | Visual C++ | Universal Windows Platform. 자세한 내용은 Visual Studio(데스크톱 브리지)를 사용하여 앱 패키지를 참조하세요.For more information, see Package an app by using Visual Studio (Desktop Bridge).

이제 새 코드를 작성할 때 헤더 파일에서만 구현되는 Windows 런타임용 표준 C++ 언어 프로젝션인 C++/WinRT를 사용할 수 있습니다.When writing new code, you can now use C++/WinRT, a standard C++ language projection for the Windows Runtime implemented solely in header files. C++/WinRT를 사용하면 모든 표준 규격 C++ 컴파일러를 통해 Windows 런타임 API를 작성하고 사용할 수 있습니다.It allows you to both author and consume Windows Runtime APIs using any standards-compliant C++ compiler. C++/WinRT는 C++ 개발자에게 최신 Windows API에 대한 최고 수준의 액세스를 제공하도록 설계되었습니다.C++/WinRT is designed to provide C++ developers with first-class access to the modern Windows API. 자세한 내용은 C++/WinRT: Windows 런타임용 최신 C++를 참조하세요.For more information, see C++/WinRT: Modern C++ for the Windows Runtime.

Windows SDK Insider Preview의 빌드 17025부터 C++/WinRT가 Windows SDK에 포함됩니다.As of build 17025 of the Windows SDK Insider Preview, C++/WinRT is included in the Windows SDK. 자세한 내용은 Windows SDK에 이제 C++/WinRT가 포함됨(영문)을 참조하세요.For more information, see C++/WinRT is now included the Windows SDK.

Clang/C2 플랫폼 도구 집합Clang/C2 platform toolset

이제 Visual Studio 2017과 함께 제공되는 Clang/C2 도구 집합이 대규모 프로젝트를 빌드하는 데 중요한 /bigobj 스위치를 지원합니다.The Clang/C2 toolset that ships with Visual Studio 2017 now supports the /bigobj switch, which is crucial for building large projects. 또한 컴파일러의 프런트 엔드와 백 엔드에서 몇몇 중요한 버그 수정이 있었습니다.It also includes several important bug fixes, both in the front-end and the back-end of the compiler.

C++ 코드 분석C++ code analysis

C++ Core 지침을 적용하기 위한 C++ Core Checkers가 이제는 Visual Studio와 함께 배포됩니다.The C++ Core Checkers for enforcing the C++ Core Guidelines are now distributed with Visual Studio. 프로젝트의 속성 페이지의 코드 분석 확장 페이지에서 체커를 활성화하기만 하면 코드 분석을 실행할 때 확장이 포함됩니다.Simply enable the checkers in the Code Analysis Extensions page in the project's property pages and the extensions will be included when you run code analysis. 자세한 내용은 C++ 핵심 지침 검사기 사용을 참조하세요.For more information, see Using the C++ Core Guidelines checkers.

CppCoreCheckCppCoreCheck

Visual Studio 2017 15.3 버전Visual Studio 2017 version 15.3
  • 리소스 관리와 관련된 규칙에 대한 지원이 추가되었습니다.Support added for rules related to resource management.
Visual Studio 2017 15.5 버전Visual Studio 2017 version 15.5
  • 새로운 C++ Core Guidelines 검사 항목에는 스마트 포인터 정확성, 올바른 전역 이니셜라이저 사용, goto 및 잘못된 캐스트 같은 구문 사용 플래그 지정이 포함됩니다.New C++ Core Guidelines checks cover smart pointer correctness, correct use of global initializers, and flagging uses of constructs like goto and bad casts.

  • 15.3에서 나타나는 일부 경고 번호가 15.5에서는 더 이상 나타나지 않습니다.Some warning numbers you may find in 15.3 are no longer available in 15.5. 이러한 경고는 더 구체적인 검사로 대체되었습니다.These warnings were replaced with more specific checks.

Visual Studio 2017 버전 15.6Visual Studio 2017 version 15.6
Visual Studio 2017 버전 15.7Visual Studio 2017 version 15.7

단위 테스트Unit testing

Visual Studio 2017 15.5 버전Visual Studio 2017 version 15.5

이제 Google Test Adapter와 Boost.Test Adapter가 C++를 사용한 데스크톱 개발 워크로드의 구성 요소로 제공되며, 테스트 탐색기와 통합됩니다.Google Test Adapter and Boost.Test Adapter are now available as components of the Desktop Development with C++ workload, and are integrated with Test Explorer. Cmake 프로젝트에 대한 CTest 지원이 추가되었습니다(폴더 열기 사용). 단, 테스트 탐색기와의 완전한 통합은 아직 제공되지 않습니다.CTest support is added for Cmake projects (using Open Folder) although full integration with Test Explorer isn't available yet. 자세한 내용은 C/C++에 대한 단위 테스트 작성을 참조하세요.For more information, see Writing unit tests for C/C++.

Visual Studio 2017 버전 15.6Visual Studio 2017 version 15.6
  • Boost.Test 동적 라이브러리 지원에 대한 지원이 추가되었습니다.Support added for Boost.Test dynamic library support.
  • 이제 Boost.Test 항목 템플릿을 IDE에서 사용할 수 있습니다.A Boost.Test item template is now available in the IDE.

자세한 내용은 Boost.Test 단위 테스트: 동적 라이브러리 지원 및 새 항목 템플릿을 참조하세요.For more information, see Boost.Test Unit Testing: Dynamic Library support and New Item Template.

Visual Studio 2017 버전 15.7Visual Studio 2017 version 15.7

C++ 단위 테스트 프로젝트에 대한 CodeLens 지원이 추가되었습니다.CodeLens support added for C++ unit test projects. 자세한 내용은 C++ 단위 테스트 프로젝트에 대한 CodeLens 알림을 참조하세요.For more information, see Announcing CodeLens for C++ Unit Testing.

Visual Studio 그래픽 진단Visual Studio graphics diagnostics

Visual Studio 그래픽 진단은 Direct3D 앱의 렌더링 및 성능 문제를 기록한 후 분석하기 위한 도구 집합입니다.Visual Studio Graphics Diagnostics is a set of tools for recording and analyzing rendering and performance problems in Direct3D apps. Windows PC에서 로컬로 실행 중이거나 Windows 디바이스 에뮬레이터 또는 원격 PC나 디바이스에서 실행 중인 앱에서 그래픽 진단 기능을 사용할 수 있습니다.Graphics Diagnostics features can be used with apps that are running locally on your Windows PC, in a Windows device emulator, or on a remote PC or device.

  • 꼭짓점 및 기하 도형 셰이더의 입력 및 출력: 꼭짓점 셰이더 및 기하 도형 셰이더의 입력과 출력을 볼 수 있는 기능은 가장 많이 요청된 기능 중 하나였으며 이제 도구에서 지원됩니다.Input & Output for Vertex and Geometry shaders: The ability to view input and output of vertex shaders and geometry shaders has been one of the most requested features, and it's now supported in the tools. 파이프라인 단계 보기에서 VS 또는 GS 단계를 선택하면 아래 표의 입력 및 출력 검사가 시작됩니다.Simply select the VS or GS stage in the Pipeline Stages view to start inspecting its input and output in the table below.

    셰이더의 입력/출력

  • 개체 테이블에서 검색 및 필터링: 찾으려는 리소스를 빠르고 쉽게 찾는 방법을 제공합니다.Search and filter in the object table: Provides a quick and easy way to find the resources you're looking for.

    검색

  • 리소스 기록: 이 새로운 보기는 캡처된 프레임 렌더링하는 동안 사용된 리소스의 전체 수정 기록을 간단하게 볼 수 있는 방법을 제공합니다.Resource History: This new view provides a streamlined way of seeing the entire modification history of a resource as it was used during the rendering of a captured frame. 리소스에 대한 기록을 호출하려면 리소스 하이퍼링크 옆에 있는 시계 아이콘을 클릭하면 됩니다.To invoke the history for any resource, simply click the clock icon next to any resource hyperlink.

    리소스 기록

    리소스의 변경 기록으로 채워진 새 리소스 기록 도구 창이 표시됩니다.This will display the new Resource History tool window, populated with the change history of the resource.

    리소스 기록 변경

    Visual Studio > 도구 > 옵션그래픽 진단 아래에서 전체 호출 스택 캡처를 사용하도록 설정하여 프레임을 캡처한 경우, Visual Studio 프로젝트 내에서 각 변경 이벤트의 컨텍스트를 신속하게 추론하고 검사할 수 있습니다.If your frame was captured with full call stack capturing enabled (Visual Studio > Tools > Options under Graphics Diagnostics), then the context of each change event can be quickly deduced and inspected within your Visual Studio project.

  • API 통계: 프레임의 API 사용에 대한 대략적인 요약을 표시합니다.API Statistics: View a high-level summary of API usage in your frame. 인지하지 못한 상태에서 수행하는 호출이나 너무 많이 수행하는 호출을 검색하는 데 유용할 수 있습니다.It's handy for discovering calls you may not realize you’re making at all, or calls you are making too much. 이 창은 Visual Studio Graphics Analyzer의 보기 > API 통계를 통해 사용할 수 있습니다.This window is available via View > API Statistics in Visual Studio Graphics Analyzer.

    API 통계

  • 메모리 통계: 드라이버가 프레임에 생성되는 리소스에 대해 할당하는 메모리 양을 표시합니다.Memory Statistics: View how much memory the driver is allocating for the resources you create in the frame. 이 창은 Visual Studio Graphics Analyzer보기 | 메모리 통계를 통해 사용할 수 있습니다.This window is available via View > Memory Statistics in Visual Studio Graphics Analyzer. 마우스 오른쪽 단추로 클릭하고 모두 복사를 선택하여 데이터를 CSV 파일에 복사한 후 스프레드시트에서 볼 수 있습니다.Data can be copied to a CSV file for viewing in a spreadsheet by right-clicking and choosing Copy All.

    메모리 통계

  • 프레임 유효성 검사: 새로운 오류 및 경고 목록을 통해 Direct3D 디버그 계층에서 검색된 잠재적인 문제에 따라 이벤트 목록을 쉽게 탐색할 수 있습니다.Frame Validation: The new errors and warnings list provides an easy way to navigate your event list based on potential issues detected by the Direct3D debug layer. Visual Studio Graphics Analyzer에서 보기 > 프레임 유효성 검사를 클릭하여 창을 엽니다.Click View > Frame Validation in Visual Studio Graphics Analyzer to open the window. 그런 다음 유효성 검사 실행을 클릭하여 분석을 시작합니다.Then click Run Validation to start the analysis. 프레임의 복잡성에 따라 완료하는 데 몇 분 정도 걸릴 수 있습니다.It can take several minutes to complete, depending on the frame's complexity.

    프레임 유효성 검사

  • D3D12에 대한 프레임 분석: 프레임 분석을 사용하여 안내된 “가상 분석” 실험을 통해 그리기 호출 성능을 분석할 수 있습니다.Frame Analysis for D3D12: Use Frame Analysis to analyze draw-call performance with directed "what-if" experiments. 프레임 분석 탭으로 전환한 다음 분석을 실행하여 보고서를 표시합니다.Switch to the Frame Analysis tab and run analysis to view the report. 자세한 내용은 GoingNative 25: Visual Studio 그래픽 프레임 분석 비디오를 시청하세요.For more details, watch the GoingNative 25: Visual Studio Graphics Frame Analysis video.

    프레임 분석

  • GPU 사용량 향상: 더욱 자세한 분석을 위해 GPU 보기 또는 WPA(Windows 성능 분석기) 도구를 사용하여 Visual Studio GPU 사용량 프로파일러를 통해 수행된 추적을 엽니다.GPU Usage Improvements: Open traces can be taken via the Visual Studio GPU Usage profiler with either GPU View or the Windows Performance Analyzer (WPA) tool for more detailed analysis. Windows Performance Toolkit이 설치된 경우 WPA 및 GPU 보기의 하이퍼링크가 각각 하나씩 세션 개요의 오른쪽 아래에 표시됩니다.If you have the Windows Performance Toolkit installed, there are two hyperlinks, one for WPA and another for GPU View, at the bottom right of the session overview.

    GPU 사용량

    이 링크를 통해 GPU 보기에서 열린 추적은 VS와 GPU 보기 간에 동기화된 타임라인 확대/축소 및 이동을 지원합니다.Traces opened in GPU View via this link support synchronized zooming and panning in the timeline between VS and GPU View. VS의 확인란을 사용하여 동기화 사용 여부를 제어합니다.A checkbox in VS is used to control whether synchronization is enabled or not.

    GPU 보기

Visual Studio 2015 업데이트 3까지 새로운 기능의 전체 목록은 Visual C++ What's New 2003 through 2015(Visual C++ 2003~2015의 새로운 기능)를 참조하세요.For the complete list of what's new through Visual Studio 2015 Update 3, see Visual C++ What's New 2003 through 2015. 모든 Visual Studio 2015의 새로운 기능에 대한 자세한 내용은 Visual Studio 2015 릴리스 정보 기록에 링크된 릴리스 정보를 참조하세요.For more information on what's new in all of Visual Studio 2015, see the release notes linked from Visual Studio 2015 Release Notes History. Visual Studio 2019의 새로운 C++ 기능에 대한 자세한 내용은 Visual Studio의 새로운 C++ 기능을 참조하세요.For information on what's new for C++ in Visual Studio 2019, see What's new for C++ in Visual Studio. Visual Studio 2017의 새로운 C++ 기능에 대한 자세한 내용은 Visual Studio 2017의 새로운 C++ 기능을 참조하세요.For information on what's new for C++ in Visual Studio 2017, see What's new for C++ in Visual Studio 2017.