Visual Studio 2017Visual Studio 2017의 Visual C++에 대한 새로운 기능What's New for Visual C++ in Visual Studio 2017Visual Studio 2017

Visual Studio 2017Visual Studio 2017에는 Visual C++ 환경에 대한 많은 업데이트와 수정이 포함되어 있습니다. brings many updates and fixes to the Visual C++ environment. 컴파일러 및 도구에서 250개 이상의 버그와 보고된 문제가 해결되었으며, 그 중 상당수는 고객이 Microsoft Connect를 통해 제출한 것들입니다.We've fixed over 250 bugs and reported issues in the compiler and tools, many submitted by customers through Microsoft Connect. 버그를 알려 주셔서 감사합니다.Thank you for reporting bugs! 모든 Visual Studio의 새로운 기능에 대한 자세한 내용은 Visual Studio 2017Visual Studio 2017의 새로운 기능을 참조하세요.For more information on what's new in all of Visual Studio, please visit What's new in Visual Studio 2017Visual Studio 2017.

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.

새 컴파일러 스위치New compiler switches

-/std:c++14/std:c++latest: 이러한 컴파일러 스위치를 사용하면 프로젝트에서 특정 버전의 ISO C++ 프로그래밍 언어를 옵트인(opt in)할 수 있습니다.-/std:c++14 and /std:c++latest: These compiler switches enable you to opt-in to specific versions of the ISO C++ programming language in a project. 자세한 내용은 -std(언어 표준 버전 지정)를 참조하세요.For more information, see -std (Specify Language Standard Version). /std:c++latest 스위치는 대부분의 새 초안 표준 기능을 보호합니다.Most of the new draft standard features are guarded by the /std:c++latest switch.

Visual Studio 2017 버전 15.3: /std:c++17 옵션을 사용하면 Visual C++ 컴파일러에서 구현된 일단의 C++17 기능을 사용할 수 있습니다.Visual Studio 2017 version 15.3: The /std:c++17 option enables the set of C++17 features implemented by the Visual C++ compiler. 이 옵션에서는 C++표준 규격 초안(Working Draft) 및 결함 업데이트의 최신 버전에서 변경되거나 새로운 기능에 대한 컴파일러 및 표준 라이브러리 지원을 사용하지 않습니다.This option disables compiler and standard library support for features that are changed or new in more recent versions of the Working Draft and defect updates of the C++ Standard.

-/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). 기본적으로 꺼져 있지만 이후 특정 시점에는 기본적으로 켜질 예정입니다.(Off by default but will be on by default at some point in the future.)

-/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:-/debug:fastlink:
일부 디버그 정보를 PDB 파일에 복사하지 않음으로써 최대 30%까지 빠른 증분 연결 시간(Visual Studio 2015 대비)을 사용합니다.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 2017Visual Studio 2017에서는 /sdl과 함께 /await를 사용할 수 있습니다. allows using /sdl with /await. 코루틴에서 /RTC 제한이 제거되었습니다.We removed the /RTC limitation with Coroutines.

Visual Studio 2017 버전 15.5: Visual C++ 컴파일러는 구조적 바인딩, constexpr 람다, if constexpr, 인라인 변수, fold 식 및 형식 시스템에 noexcept 추가 등 C++17 기능의 약 75%를 지원합니다.Visual Studio 2017 version 15.5: The Visual C++ compiler supports about 75% of C++17 features, including structured bindings, constexpr lambdas, if constexpr, inline variables, fold expressions, and adding noexcept to the type system. 이는 /std:c++17 스위치하에서 사용할 수 있습니다.These are available under the /std:c++17 switch. /permissive- conformance 모드에는 2단계 이름 조회에 대한 부분적인 지원이 포함됩니다.The /permissive- conformance mode includes partial support for two-phase name lookup. 자세한 내용은 Visual Studio 2017의 C++ 규칙 향상을 참조하세요.For more information, see C++ Conformance Improvements in Visual Studio 2017.

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 "15"(Visual Studio "15"의 컴파일러 도구 레이아웃)를 참조하세요.For more information, see Compiler Tools Layout in Visual Studio "15".
  • 향상된 진단: 이제 출력 창에 오류가 발생하는 열이 표시됩니다.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 switch) has been removed. 대신 co_yield를 사용하도록 코드를 업데이트해야 합니다.Your code should be updated to use co_yield instead. 자세한 내용은 Visual C++ 팀 블로그를 참조하세요.For more information, see the Visual C++ Team blog.

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 C++ 런타임 성능은 계속 개선되고 있습니다.Visual Studio 2017 version 15.5: Visual C++ runtime performance continues to improve due to better generated code quality. 즉, 사용자 코드를 단순히 다시 컴파일하기만 하면 앱이 보다 빠르게 실행됩니다.This means that you can simply recompile your code, and your app just 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).

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

전체적으로 C++17 모드를 사용 중일 때 /Zc:noexceptTypes- 스위치를 사용하여 noexcept의 C++14 버전으로 되돌릴 수 있습니다.The /Zc:noexceptTypes- switch can be used to revert to the C++14 version of noexcept while using C++17 mode in general. 이렇게 하면 모든 throw() 코드를 동시에 다시 작성할 필요 없이 C++17에 부합하도록 소스 코드를 업데이트할 수 있습니다.This 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.

C++ 표준 라이브러리 향상C++ Standard Library improvements

  • 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)".
  • 성능 향상: basic_string::find(char) 오버로드가 traits::find를 한 번만 호출합니다.Performance improvement: made basic_string::find(char) overloads only call traits::find once. 이전에 이 오버로드는 길이가 1인 문자열을 대상으로 한 일반 문자열 검색으로 구현되었습니다.Previously this was implemented as a general string search for a string of length 1.
  • 성능 향상: basic_string::operator==가 문자열 내용을 비교하기 전에 문자열 크기를 확인합니다.Performance improvement: basic_string::operator== now checks the string's size before comparing the strings' contents.
  • 성능 향상: basic_string에서 컴파일러 최적화 프로그램의 분석 작업을 어렵게 한 컨트롤 결합을 제거했습니다.Performance improvement: removed control coupling in basic_string which was difficult for the compiler optimizer to analyze. VSO# 262848 "<string>: reserve() 작업이 너무 많습니다."를 해결했습니다.Resolves VSO# 262848 "<string>: reserve() does too much work". 그래도 짧은 문자열을 대상으로 reserve를 호출할 때 아무 작업도 하지 않도록 하는 데 비용이 듭니다.Note that for all short strings, calling reserve still has nonzero cost to do nothing.
  • <any>, <string_view>, apply(), make_from_tuple()을 추가했습니다.We added <any>, <string_view>, apply(), make_from_tuple().
  • std::vector가 정확성과 성능에서 철저히 점검되었습니다. 이제 삽입/대입 작업에서 앨리어싱이 표준에서 요구하는 대로 올바르게 처리되고, 강한 예외 보장이 표준에 따라 요구되면 move_if_noexcept() 및 기타 논리를 통해 제공되며, 삽입/대입의 항목 작업 개수가 줄어들었습니다.std::vector has been overhauled for correctness and performance: aliasing during insertion/emplacement 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 insertion/emplacement perform fewer element operations.
  • 이제 C++ 표준 라이브러리가 가상의 null 포인터를 역참조하지 못하도록 방지합니다.The C++ Standard Library now avoids dereferencing null fancy pointers.
  • <옵션>, <variant>, shared_ptr::weak_type 및 <cstdalign>이 추가되었습니다.Added <optional>, <variant>, shared_ptr::weak_type, and <cstdalign>.
  • min/max/minmax(initializer_list) 및 min_element/max_element/minmax_element()에 C++14 constexpr을 사용할 수 있게 되었습니다.Enabled C++14 constexpr in min/max/minmax(initializer_list) and min_element/max_element/minmax_element().
  • weak_ptr::lock() 성능이 향상되었습니다.Improved weak_ptr::lock() performance.
  • 이전에 코드가 영원히 잠기는 문제가 발생하던 std::promise의 이동 할당 연산자가 해결되었습니다.Fixed std::promise's move assignment operator, which previously could cause code to block forever.
  • atomic<T *>를 T *로 암시적으로 변환할 때 발생하는 컴파일러 오류를 해결했습니다.Fixed compiler errors with atomic<T *>'s 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 move_iterator's subtraction operator.
  • propagate_on_container_copy_assignment 및 propagate_on_container_move_assignment를 요청하는 상태 저장 사용자 정의 할당자에 대한 잘못된 자동 코드 생성이 해결되었습니다.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&().
  • 컴파일러 처리량을 늘리기 위해 이제 C++ 표준 라이브러리 헤더는 불필요한 컴파일러 내장 함수에 대한 선언을 포함하지 않습니다.To increase compiler throughput, C++ Standard Library headers now avoid including declarations for unnecessary compiler intrinsics.
  • 잘못된 bind() 호출에 대한 컴파일러 진단이 약간 개선되었습니다.Slightly improved compiler diagnostics for incorrect bind() calls.
  • std::string/std::wstring의 이동 생성자 성능이 3배 넘게 향상됨Improved the performance of std::string/std::wstring's move constructors by more than 3x
  • 향상된 표준 라이브러리 기능에 대한 전체 목록은 VS 2017 RTM의 표준 라이브러리 수정(영문)을 참조하세요.For a complete list of Standard Library improvments see the Standard Library Fixes In VS 2017 RTM.

Visual Studio 2017 15.3 버전Visual Studio 2017 version 15.3

C++17 기능C++17 features

몇 가지 C++17 추가 기능이 구현되었습니다.Several additional C++17 features have been implemented. 자세한 내용은 Visual C++ 언어 규칙을 참조하세요.For more information, see Visual C++ Language Conformance.

기타 새로운 기능Other new features

  • 구현된 P0602R0 "variant 및 optional에서 복사/이동 사소성(triviality)을 전파해야 합니다".Implemented P0602R0 "variant and optional should propagate copy/move triviality".
  • 표준 라이브러리에서는 이제 비활성화되는 동적 RTTI를 /GR-를 통해 공식적으로 허용합니다.The Standard Library now officially tolerates dynamic RTTI being disabled via /GR-. dynamic_pointer_cast() 및 rethrow_if_nested()에는 기본적으로 dynamic_cast가 필요하므로 이제 표준 라이브러리에서는 이러한 함수들을 /GR- 아래에 =delete로 표시합니다.dynamic_pointer_cast() and rethrow_if_nested() inherently require dynamic_cast, so the Standard Library now marks them as =delete under /GR-.
  • 동적 RTTI가 /GR-를 통해 비활성화된 경우에도 "정적 RTTI"(typeid(SomeType) 형식)를 계속 사용할 수 있으며, 몇 가지 표준 라이브러리 구성 요소를 제공합니다.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을 통해 정적 RTTI를 비활성화할 수 있습니다.The Standard Library now supports disabling this too, via /D_HAS_STATIC_RTTI=0. 이 경우 std::any, std::function의 target() 및 target_type() 및 shared_ptr의 get_deleter()를 비활성화합니다.Note that this will disable std::any, std::function's target() and target_type(), and shared_ptr's get_deleter().

정확성 수정Correctness fixes

  • 이제 표준 라이브러리 컨테이너에서는 max_size()를 size_type의 max가 아니라 numeric_limits<difference_type>::max()로 제한합니다. 이렇게 하면 해당 컨테이너의 반복기에 대한 distance() 결과를 distance() 반환 형식으로 나타낼 수 있습니다.Standard Library containers now clamp their max_size() to numeric_limits<difference_type>::max() rather than size_type's max. This 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 인수가 정수 형식이 아닌 경우 meow_n() 알고리즘을 컴파일하지 못했습니다. 이제는 정수 형식이 아닌 길이를 반복기의 difference_type으로 변환하려고 시도합니다.The meow_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 which were comparing with 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 event of a spurious wake. 이제는 상대 시간의 단일 간격만 대기합니다.Now, it will wait for only a single interval of the relative time.
  • future::get()은 표준에 필요한 만큼 미래를 무효화합니다.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 did not swap their hashers 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_types 할당자(C++17 모드에서)를 적용합니다.The Standard Library will now enforce matching allocator value_types (in C++17 mode) with an opt-out escape hatch.
  • basic_strings에 대한 self-range-insert에서 문자열의 내용이 뒤섞이는 일부 조건이 수정되었습니다.Fixed some conditions where self-range-insert into basic_strings 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-qualified 및/또는 ref-qualified인 함수 형식을 처리합니다.std::decay now handles abominable function types (i.e. 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 "열거형 'Kitten'의 switch에 있는 'Meow' 열거자는 case 레이블에 의해 명시적으로 처리되지 않습니다."가 수정되었습니다.Fixed warning C4061 "enumerator 'Meow' in switch of enum 'Kitten' 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 does not 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's debug checks. 이제는 목록 반복기에서 operator->()를 검사하고, list::unique()에서는 반복기를 무효화된(invalidated) 것으로 표시합니다.List iterators now check operator->(), and list::unique() now marks iterators as invalidated.
  • 튜플의 use-allocator 메타 프로그래밍이 수정되었습니다.Fixed uses-allocator metaprogramming in tuple.

성능/처리량 수정Performance/throughput fixes

  • SEH(구조적 예외 처리)를 사용하는 함수로 std::atomic의 구현을 인라인하지 못하게 했던 noexcept와의 상호 작용이 해결되었습니다.Worked around interactions with noexcept which prevented inlining std::atomic's 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.
  • 모든 잠금의 'try_lock()에서 회전하는 대신 lock() 작업을 사용하는 std::lock()의 교착 상태 방지 알고리즘이 향상되었습니다.Improved std::lock()'s deadlock avoidance algorithm to use lock() operations instead of spinning on all the locks' try_lock()s.
  • system_category::message()에서 명명된 반환 값 최적화가 활성화되었습니다.Enabled the Named Return Value Optimization in system_category::message().
  • 연결과 분리는 이제 2N + 2 형식 대신 N + 1 형식을 인스턴스화합니다.conjunction and disjunction now instantiate N + 1 types, instead of 2N + 2 types.
  • 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 (i.e. most code).
  • C++11 최소 할당자 인터페이스는 이제 _Wrap_alloc 내부 클래스에 할당자를 래핑하는 대신 allocator_traits를 직접 호출하는 표준 라이브러리에서 처리됩니다.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<할당자 유형> 대신 할당자 유형이 표시되기 때문임).This 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의 내부 축소 경로는 더 이상 재할당 작업의 경로에 있지 않으므로 모든 변경 멤버에 대한 코드 크기가 줄어듭니다.basic_string's 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() 경로에 없습니다.basic_string's internal grow path is no longer in the path of shrink_to_fit().
  • basic_string의 변경 작업은 이제 할당되지 않은 빠른 경로와 할당된 느린 경로 함수에 팩터링되어 기능이 할당되므로 일반적인 재할당되지 않은 case가 호출자에 인라인될 가능성이 높아집니다.basic_string's 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의 변형 작업은 이제 크기를 조정하는 대신 원하는 상태로 재할당된 버퍼를 구성합니다.basic_string's 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 errno's address to remove repeated interaction with TLS.
  • is_pointer의 구현이 간소화되었습니다.Simplified is_pointer's implementation.
  • 함수 기반 식 SFINAE가 struct/void_t 기반으로 변경되었습니다.Finished changing function-based Expression SFINAE to struct/void_t-based.
  • 표준 라이브러리 알고리즘은 이제 반복기의 후위 증가 연산(postincrement)을 방지합니다.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.

가독성 및 기타 향상된 기능Readability and other improvements

  • 표준 라이브러리에서는 이제 조건부로 정의된 매크로 대신 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 메시지로 변경되었습니다.Changed static_assert(false, "message") to #error message. 이렇게 하면 #error에서 컴파일을 즉시 중단하기 때문에 컴파일러 진단이 향상됩니다.This 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 this.
  • SFINAE가 기본 템플릿 인수로 추출되어 반환 형식 및 함수 인수 형식에 비해 간단하게 표시됩니다.Extracted SFINAE to default template arguments, which reduces 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.

새로운 실험적 기능New experimental features

  • 다음과 같은 병렬 알고리즘에 대 한 실험적 지원:Experimental support for the following parallel algorithms:
    • all_ofall_of
    • any_ofany_of
    • for_eachfor_each
    • for_each_nfor_each_n
    • none_ofnone_of
    • reducereduce
    • replacereplace
    • replace_ifreplace_if
    • sortsort
  • 다음과 같은 병렬 알고리즘에 대한 서명이 추가되었지만 현재는 병렬화되어 있지 않으므로 요소를 이동하거나 변경하기만 하는 병렬화 알고리즘에서는 아무 유익이 없는 것으로 나타났습니다.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:
    • copycopy
    • copy_ncopy_n
    • fillfill
    • fill_nfill_n
    • 이동move
    • reversereverse
    • reverse_copyreverse_copy
    • rotaterotate
    • rotate_copyrotate_copy
    • swap_rangesswap_ranges

성능 수정 및 개선 사항Performance fixes and improvements

  • basic_string<char16_t>는 이제 basic_string<wchar_t>가 참여하는 memcmp/memcpy/etc. 최적화에 참여합니다.basic_string<char16_t> now engages memcmp/memcpy/etc. optimizations that basic_string<wchar_t> engages.
  • 함수 포인터가 Visual Studio 2015 업데이트 3의 "함수 복사 방지" 작업으로 인해 인라인되고 노출되지 않도록 방지하는 최적화 제한 문제가 해결되어 lower_bound(iter, iter, 함수 포인터)의 성능이 복원되었습니다.An optimizer limitation which 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_difference 및 set_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::equal과 std::partition에는 점프 스레딩 최적화 전달이 있어 반복기 비교가 필요 없습니다.std::equal and std::partition had a jump-threading optimization pass which 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::equal 및 std::lexicographical_compare는 std::byte 및 gsl::byte(그리고 다른 char-ish 열거 및 열거 클래스)를 위해 memset/memcmp로 디스패치하는 방법을 지시받았습니다.std::fill, std::equal, and std::lexicographical_compare were taught how to dispatch to memset / memcmp for std::byte and gsl::byte (and other char-ish enums and enum classes). std::copy는 is_trivially_copyable을 사용하여 디스패치하므로 변경 작업이 필요하지 않습니다.Note that std::copy dispatches using is_trivially_copyable and thus didn't need any changes.
  • STL은 더 이상 형식을 non-trivially-destructible로 만드는 동작만 수행하는 empty-braces 소멸자를 포함하지 않습니다.The STL no longer contains empty-braces destructors whose only behavior was to make types non-trivially-destructible.

정확성 수정Correctness fixes

  • 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 15.3 have been repaired in 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(할당자)는 이제 이러한 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.
  • std::allocator는 이제 alignment가 max_align_t – in C++17 mode보다 큰 over-aligned types - types 할당을 올바르게 처리합니다(/Zc:alignedNew-로 비활성화되지 않은 경우에 한함).std::allocator now properly handles allocation of over-aligned types - types whose alignment is greater than max_align_t – in C++17 mode (unless disabled by /Zc:alignedNew-). 예를 들어 16 또는 32바이트 맞춤이 있는 개체의 벡터는 이제 SSE/AVX 명령에 맞게 올바르게 맞춰집니다.For example, vectors of objects with 16 or 32-byte alignment will now be properly aligned for SSE / AVX instructions.

기타 라이브러리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++.

Visual Studio 2017 버전 15.5Visual Studio 2017 version 15.5

CPPRest SDK 2.9.0CPPRest SDK 2.9.0

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

  • 이름 조회 규칙의 다른 설정 수정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 표시Un-suppress 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 AND building a DLL]. 물론 이에 해당하는 경우는 더 이상 없습니다.This is no longer the case. 스레드 안전 초기화 해제를 원하는 경우 프로젝트 설정에 /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 subsequent 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. 이전과 같은 옵션을 표시하는 동일한 범주 아래에는 이제 새로운 Windows 데스크톱 마법사가 있습니다.There's a new Windows Desktop Wizard now under the same category that displays the same options as before.

Visual Studio 2017 버전 15.5: 리팩터링 및 코드 탐색에 IntelliSense 엔진을 사용하는 일부 C++ 작업은 훨씬 더 빨리 실행됩니다.Visual Studio 2017 version 15.5: 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 GoTo Definition을 지원하여 정의에 대한 마우스 탐색을 쉽게 해줍니다.C++ now supports Ctrl+Click GoTo 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 및 필터링)을 참조하세요.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 are 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++ 프로젝트를 위한 새로운 실험적 기능이 있습니다.The experimental feature for C++ projects 'Faster project load'. 다음에 C++ 프로젝트를 열 때 프로젝트가 더 빠르게 로드되고, 그 다음에 프로젝트를 열 때는 더 빠르게 로드됩니다.The next time you open a C++ project it will load faster, and the time after that it will load really fast!

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

폴더 열기를 사용한 비 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를 훨씬 간단하게 시작할 수 있습니다.This makes it much simpler to get started with Visual Studio even if your project is not 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. 자세한 내용은 Visual C++의 폴더 열기 프로젝트를 참조하세요.For more information, see Open Folder projects in Visual 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 C++의 CMake 프로젝트를 참조하세요.For more information, see CMake projects in Visual C++. “폴더 열기”로 CMake 프로젝트를 여는 경우 C++ 편집, 빌드, 디버깅 환경이 자동으로 구성됩니다.Opening CMake projects with “Open Folder” will automatically configure the environment for C++ editing, building and debugging.

  • C++ IntelliSense가 루트 폴더에 CppProperties.json 파일을 만들지 않아도 작동합니다.C++ IntelliSense will work without the need to create a CppProperties.json file in the root folder. 이와 함께 CMake 파일과 CppProperties.json 파일에서 제공하는 구성을 서로 쉽게 전환할 수 있도록 새 드롭다운을 추가했습니다.Along with this, we've 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: CMake 닌자 생성기에 대한 지원이 추가되었습니다.Visual Studio 2017 version 15.3: Support added for the CMake Ninja generator. 자세한 내용은 Visual C++의 CMake 프로젝트를 참조하세요.For more information, see CMake projects in Visual C++.

Visual Studio 2017 버전 15.5: 기존 CMake 캐시 가져오기에 대한 지원이 추가되었습니다.Visual Studio 2017 version 15.5: Support added for importing existing CMake caches. 자세한 내용은 Visual C++의 CMake 프로젝트를 참조하세요.For more information, see CMake projects in Visual C++.

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에 나열된 구성 요소에 대해 표시된 설치 크기는 정확하지 않으며 전체 크기는 이보다 클 수 있습니다.Please note that the indicated installation sizes for the components listed in the installer UI are not 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.14393)"를 설치하면 제대로 작동합니다.Installing the recommended (selected) components “VC++ 2017 v141 toolset (x86, x64)” and “Windows 10 SDK (10.0.14393)” will ensure this will work. 필요한 도구가 설치되어 있지 않으면 프로젝트가 생성되지 않고 마법사가 중단됩니다.If the necessary tools are not installed, projects will not be created successfully and the wizard will hang.

Visual Studio 2017 버전 15.5: Visual C++ 빌드 도구(이전에 독립 실행형 제품으로 제공)가 이제 Visual Studio 설치 관리자에 작업으로 포함됩니다.Visual Studio 2017 version 15.5: 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 2015 버전 15.5의 최신 향상 기능이 포함되어 있습니다.The v141 toolset contains the lastest improvements in Visual Studio 2015 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.2: 플랫폼 간 코드 공유 및 형식 시각화에 대한 기능이 향상되었습니다.Visual Studio 2017 version 15.2: Improvements for 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:

  1. Linux 작업은 원격 Linux 컴퓨터에 파일을 동기화하는 sftp에 대한 대안으로 rsync 지원을 추가했습니다.The Linux workload has added support for rsync as an alternative to sftp for synchronizing files to remote Linux machines.
  2. ARM 마이크로프로세서를 대상으로 하는 교차 컴파일을 위한 지원이 추가되었습니다.Support is added for cross compilation targeting ARM microcontrollers. 설치 시 이를 활성화하려면 C++ 작업을 사용한 Linux 개발을 선택하고 포함 IoT 개발 옵션을 선택합니다.To enable this in the installation choose the Linux development with C++ workload and select the option for Embedded and IoT Development. 그러면 ARM GCC 크로스 컴파일 도구 및 CMake가 설치 대상에 추가됩니다.This 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.
  3. 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.
  4. 원격 작업 실행에 대한 지원이 추가되었습니다.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.

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을 대상으로 한 UWP 프로젝트를 열 때 Visual Studio 2015를 설치하지 않은 경우 프로젝트 속성 페이지에서 v141 플랫폼 도구 집합을 선택해야 합니다.If you open a v140-targeted UWP project in Visual Studio 2017, you need to select the v141 platform toolset in the project property pages if you do not have Visual Studio 2015 installed.

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

이제 유니버설 Windows 플랫폼 및 Windows 스토어용 C++ 응용 프로그램을 작성하고 패키징하기 위한 새로운 옵션이 있습니다. Windows 스토어를 통해 배포하기 위해 데스크톱 앱 변환기를 사용하여 기존 데스크톱 응용 프로그램을 패키징할 수 있습니다.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 App Converter to package your existing desktop application for deployment through the Windows Store. 자세한 내용은 Using Visual C++ Runtime in Centennial project(Centennial 프로젝트에서 Visual C++ 런타임 사용) 및 데스크톱 브리지를 사용하여 데스크톱 앱을 UWP(유니버설 Windows 플랫폼)로 가져오기를 참조하세요.For more information, see Using Visual C++ Runtime in Centennial project and Bring your desktop app to the Universal Windows Platform (UWP) with the Desktop Bridge.

Visual Studio 2017 버전 15.5Visual Studio 2017 version 15.5
데스크톱 브리지를 사용하여 데스크톱 응용 프로그램 패키징을 지원하는 Windows 응용 프로그램 패키징 프로젝트 프로젝트 템플릿이 추가되었습니다.A Windows Application Packaging Project project template is added which supports packaging desktop applications by using Desktop Bridge. 파일 | 새로 만들기 | 프로젝트 | 설치됨 | Visual C++ | 유니버설 Windows 플랫폼에서 볼 수 있습니다.It is available under File | New | Project | Installed | Visual C++ | Universal Windows Platform.

이제 새 코드를 작성할 때 헤더 파일에서만 구현되는 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 Available on GitHub(GitHub에서 C++/WinRT를 사용할 수 있음)를 참조하세요.For more information, see C++/WinRT Available on GitHub.

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 2017Visual Studio 2017와 함께 제공되는 Clang/C2 도구 집합이 대규모 프로젝트를 빌드하는 데 중요한 /bigobj 스위치를 지원합니다.The Clang/C2 toolset that ships with Visual Studio 2017Visual 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 dialog 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: 새로운 C++ Core Guidelines 검사 항목에는 스마트 포인터 정확성, 올바른 전역 이니셜라이저 사용, goto 및 잘못된 캐스트 같은 구문 사용 플래그 지정이 포함됩니다.Visual Studio 2017 version 15.5: 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.

유닛 테스트Unit testing

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

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 is 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 프로젝트 내에서 검사할 수 있습니다.Note that if your frame was captured with full call stack capturing enabled (Visual Studio | Tools | Options | 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. 인지하지 못한 상태에서 수행 중인 호출이나 너무 많이 수행 중인 호출을 검색하는 데 유용할 수 있습니다.This can be handy in 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 Graphics Frame Analysis(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 taken via the Visual Studio GPU Usage profiler with either GPU View or the Windows Performance Analyzer (WPA) tool for more detailed analysis. Windows 성능 도구 키트가 설치되어 있는 경우 WPA 및 GPU 보기를 위한 두 개의 하이퍼링크가 세션 개요의 오른쪽 아래에 표시됩니다.If you have the Windows Performance Toolkit installed there will be two hyperlinks, one for WPA and other 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 보기