Visual Studio 2013 Visual C++의 새로운 기능
이 문서에서는 Visual Studio 2013의 Visual C++에서 사용할 수 있는 새로운 기능과 향상된 기능에 대해 설명합니다.
Visual Studio 2013에 추가된 다른 기능에 대한 자세한 내용은 Visual Studio 2013의 새로운 기능을 참조하십시오.
향상된 ISO C/C++ 표준 지원
컴파일러
다음과 같은 ISO C++11 언어 기능을 지원합니다.
함수 템플릿의 기본 템플릿 인수
명시적 변환 연산자
삭제된 함수
기본값으로 설정된 함수*****
다음과 같은 ISO C99 언어 기능을 지원합니다.
_Bool
복합 리터럴
지정된 이니셜라이저
코드 혼합 선언
새 컴파일러 옵션 /Zc:strictStrings를 사용하여 수정할 수 있는 값으로 문자열 리터럴 변환을 허용하지 않도록 설정할 수 있습니다.C++98에서 문자열 리터럴에서 **char ***로(및 와이드 문자열 리터럴에서 **wchar_t ***로)의 변환은 사용되지 않습니다.C++11에서 변환이 완전히 제거되었습니다.컴파일러가 표준을 엄격하게 준수할 수 있지만 대신 사용자가 변환을 제어할 수 있도록 /Zc:strictStrings 옵션을 제공합니다.기본적으로 이 옵션은 해제되어 있습니다.디버그 모드에서 이 옵션을 사용하면 STL은 컴파일되지 않습니다.
rvalue/lvalue 참조 캐스트. rvalue 참조를 사용하여 C++11은 lvalue와 rvalue를 명확하게 구별할 수 있습니다.이전에는 Visual C++ 컴파일러가 특정 캐스팅 시나리오에서 이 기능을 제공하지 않았습니다.C++ Language Working Paper(5.4단원, [expr.cast]/1 참조)에 따라 새 컴파일러 옵션인 /Zc:rvalueCast가 추가되었습니다.
이 옵션이 지정되지 않은 경우 기본 동작은 Visual Studio 2012와 동일합니다.
[!참고]
* 기본 함수의 경우 멤버 단위 이동 생성자 및 이동 할당 연산자를 요청하기 위한 =default 사용은 지원되지 않습니다.
C99 라이브러리
math.h, ctype.h, wctype.h, stdio.h, stdlib.h 및 wchar.h 헤더에 누락된 함수를 위해 선언과 구현이 추가되었습니다.또한 새로운 헤더 complex.h, stdbool.h, fenv.h 및 inttypes.h가 추가되었고 모든 함수에 대한 구현이 여기에 선언되었습니다.새로운 C++ 래퍼 헤더(ccomplex, cfenv, cinttypes, ctgmath)가 있으며 다수의 기타 래퍼 헤더가 업데이트됩니다(ccomplex, cctype, clocale, cmath, cstdint, cstdio, cstring, cwchar 및 cwctype).자세한 내용은 C99 library support in Visual Studio 2013을 참조하십시오.
표준 템플릿 라이브러리
C++11 명시적 변환 연산자, 이니셜라이저 목록, 범위가 지정된 열거형 및 variadic 템플릿을 지원합니다.
이제 모든 컨테이너가 C++11의 세부적인 요소 요구 사항을 지원합니다.
다음과 같은 C++14 기능을 지원합니다.
less<>, greater<>, plus<>, multiplies<> 등의 "투명 연산자 함수"
make_unique<T>(args...) 및 make_unique<T[]>(n)
cbegin()/cend(), rbegin()/rend() 및 crbegin()/crend() 비멤버 함수
**<atomic>**은 다양한 방식으로 성능이 향상되었습니다.
**<type_traits>**는 안정성이 크게 향상되었으며 코드가 수정되었습니다.
주요 변경 사항
이렇게 향상된 ISO C/C++ 표준 지원 기능을 사용하려면 C++11을 따르고 Visual Studio 2013의 Visual C++에서 올바르게 컴파일되도록 기존 코드를 변경해야 할 수 있습니다.자세한 내용은 Visual C++의 주요 변경 사항을 참조하십시오.
새로운 C++11/14 언어 및 STL 기능에 대한 자세한 내용은 C++11 기능에 대한 지원(최신 C++) 및 C++11/14 STL Features, Fixes, And Breaking Changes In Visual Studio 2013을 참조하십시오.
Visual C++ 라이브러리 향상
C++ REST SDK가 추가되었습니다.이 SDK에는 REST 서비스의 최신 C++ 구현이 포함되어 있습니다.자세한 내용은 C++ REST SDK를 참조하십시오.
C++ AMP 질감 지원이 향상되었습니다.이제 밉 맵 및 새로운 샘플링 모드를 지원합니다.
PPL 작업이 여러 일정 관리 기술 및 비동기 디버깅을 지원합니다.새 API를 사용하면 정상 결과 및 예외 조건 둘 다에 대한 PPL 작업을 만들 수 있습니다.
C++ 응용 프로그램 성능
자동 벡터화 도우미가 이제 더 많은 C++ 패턴을 인식하고 최적화하므로 코드를 더 빠르게 실행할 수 있습니다.
ARM 플랫폼 및 Atom 마이크로 아키텍처 코드 품질 향상
__vectorcall 호출 규칙이 추가되었습니다.백터 레지스터를 사용하기 위해 __vectorcall 호출 규칙을 사용하여 벡터 형식 인수를 전달할 수 있습니다.
새 링커 옵션./Gw(컴파일러) 및 /Gy(어셈블러) 스위치를 사용하면 링커 최적화에서 간결한 이진 파일을 생성할 수 있습니다.
CPU와 GPU 사이의 데이터 복사를 줄이거나 제거하기 위한 C++ AMP 공유 메모리 지원
PGO(프로필 기반 최적화) 향상:
PGO 사용으로 최적화된 응용 프로그램 작업 집합의 감소로 인한 성능 향상
Windows 스토어 응용 프로그램 개발을 위한 새로운 PGO
Windows 스토어 응용 프로그램 개발 지원
**값 구조체에서 Boxed 형식 지원.**int와 반대되는 IBox<int>^처럼 null일 수 있는 필드를 사용하여 값 형식을 정의할 수 있습니다.즉, 필드가 값을 포함할 수 있거나 nullptr과 같을 수 있습니다.
자세한 예외 정보. C++/CX는 ABI(응용 프로그램 이진 인터페이스)에서 자세한 예외 정보를 캡처하고 전파할 수 있도록 하는 새로운 Windows 오류 모델을 지원합니다. 여기에는 호출 스택과 사용자 지정 메시지 문자열이 포함됩니다.
Object::ToString()이 이제 Virtual임. 이제 사용자 정의 Windows 런타임 ref 형식에서 ToString을 재정의할 수 있습니다.
사용되지 않는 API 지원. 공용 Windows 런타임 API는 이제 사용되지 않는 것으로 표시되고 빌드 경고로 나타나는 사용자 지정 메시지가 제공될 수 있으며, 마이그레이션 지침을 제공할 수 있습니다.
디버거 향상. 네이티브/JavaScript interop 디버깅, Windows 런타임 예외 진단 및 비동기 코드 디버깅(Windows 런타임 및 PPL)을 지원합니다.
[!참고]
이 단원에 설명된 C++ 관련 기능 및 향상 기능 외에도 Visual Studio의 다른 여러 향상 기능을 통해 Windows 스토어 응용 프로그램을 보다 효과적으로 작성할 수 있습니다.이러한 기능에 대한 자세한 내용은 Windows 8.1 기능 가이드를 참조하십시오.새로운 응용 프로그램 템플릿에 대한 자세한 내용은 C#, VB, and C++ project templates for Windows Store apps를 참조하십시오.새로운 플랫폼 기능 목록을 보려면 Windows 8.1 Preview: New APIs and features를 참조하십시오.
진단 향상
디버거 향상. 비동기 디버깅 및 내 코드만 디버깅을 지원합니다.
코드 분석 범주. 이제 코드 분석기에서 분류된 출력을 보고 코드 결함을 찾아 수정할 수 있습니다.
XAML 진단. 이제 XAML에서 UI 응답성 및 배터리 사용 문제를 진단할 수 있습니다.
그래픽 및 GPU 디버깅 향상
원격 캡처 및 실제 장치에서의 재생
C++ AMP 및 CPU 동시 디버깅
향상된 C++ AMP 런타임 진단
HLSL 계산 셰이더 추적 디버깅
3차원 그래픽 향상
미리 곱한 알파 DDS 형식에 대한 이미지 콘텐츠 파이프라인 지원
이미지 편집기는 렌더링을 위해 내부적으로 미리 곱한 알파를 사용하므로 짙은 후광과 같은 렌더링 아티팩트를 방지합니다.
이미지 및 모델 편집기. 이제 이미지 편집기 및 모델 편집기의 셰이더 디자이너에서 사용자 정의 필터 만들기가 지원됩니다.
IDE 및 생산성
C++로 코드를 작성할 때 생산성을 높일 수 있도록 Visual Studio IDE의 기능이 크게 향상되었습니다.
향상된 코드 서식 지정. C++ 코드에 보다 다양한 서식 설정을 적용할 수 있습니다.이러한 설정을 사용하여 중괄호 및 키워드의 새 줄 배치, 들여쓰기, 공백 및 줄 바꿈을 제어할 수 있습니다. 문과 블록을 완료할 때와 파일에 코드를 붙여 넣을 때 코드의 서식이 자동으로 지정됩니다.서식 설정을 수정하려면 Visual Studio의 메뉴 모음에서 도구, 옵션을 선택하고 텍스트 편집기, C/C++, 서식 노드를 확장한 후 변경합니다.빠른 실행 상자를 사용하여 이러한 옵션에 액세스할 수도 있습니다.
중괄호 완성. C++ 코드는 이제 다음 여는 문자에 해당하는 닫는 문자를 자동으로 완성합니다.
{(중괄호)
[(대괄호)
((괄호)
'(작은따옴표)
"(큰따옴표)
추가 C++ 자동 완성 기능
클래스 형식에 세미콜론을 추가합니다.
원시 문자열 리터럴에 대한 괄호를 완성합니다.
여러 줄 주석(/* */)을 완성합니다.
모든 참조 찾기는 이제 텍스트 일치 목록을 표시한 후 백그라운드에서 참조를 자동으로 확인하고 필터링합니다. 참조 확인을 비활성화하려면 Visual Studio의 메뉴 모음에서 도구, 옵션을 선택하고, 텍스트 편집기, C/C++ 및 고급 노드를 확장한 후 참조 아래에서 확인 사용 안 함 설정을 변경합니다.
중괄호 완성 설정을 수정하려면 Visual Studio의 메뉴 모음에서 도구, 옵션을 선택하고 텍스트 편집기, C/C++, 일반 노드를 확장한 후 변경합니다.텍스트 편집기, 모든 언어, 일반 노드를 확장하여 모든 Visual Studio 언어의 설정을 변경할 수도 있습니다.
특정 C++ 설정을 수정하려면 메뉴 모음에서 도구, 옵션을 선택하고 텍스트 편집기, C/C++, 고급 노드를 확장한 후 변경합니다.
컨텍스트 기반 멤버 목록 필터링. 액세스할 수 없는 멤버는 IntelliSense 멤버 목록에서 필터링됩니다. 예를 들어 형식을 구현하는 코드를 수정하지 않으면 개인 멤버는 멤버 목록에 표시되지 않습니다.멤버 목록이 열려 있는 동안 Ctrl+J를 눌러 필터링을 한 수준씩 제거할 수 있습니다(현재 멤버 목록 창에만 적용).Ctrl+J를 다시 눌러 텍스트 필터링을 제거하고 모든 멤버를 표시할 수 있습니다.
매개 변수 도움말 스크롤. 매개 변수 도움말 도구 설명에 표시된 함수 시그니처는 임의의 시그니처를 표시하고 현재 컨텍스트에 따라 업데이트하는 것이 아니라 실제로 입력한 매개 변수의 수에 따라 변경됩니다.매개 변수 도움말도 중첩된 함수에 표시될 때 올바르게 작동합니다.
헤더/코드 파일 전환. 이제 바로 가기 메뉴 또는 바로 가기 키의 명령을 사용하여 헤더와 해당 코드 파일 사이를 전환할 수 있습니다.
크기를 변경할 수 있는 C++ 프로젝트 속성 창
C++/CX 및 C++/CLI의 이벤트 처리기 코드 자동 생성. C++/CX 또는 C++/CLI 코드 파일에 이벤트 처리기를 추가하는 코드를 입력하는 경우 편집기는 대리자 인스턴스와 이벤트 처리기 정의를 자동으로 생성할 수 있습니다.도구 설명 창은 이벤트 처리기 코드를 자동으로 생성할 수 있을 때 나타납니다.
DPI 인식 향상. 이제 응용 프로그램 매니페스트 파일의 DPI 인식 설정에서 "모니터 단위 높은 DPI 인식" 설정을 지원합니다.
보다 빠른 구성 전환. 대규모 응용 프로그램에서 특히 후속 전환 작업과 같은 구성 전환이 훨씬 더 빠르게 실행됩니다.
빌드 시간 효율성
- 보다 빠른 빌드. 다양한 최적화 및 멀티 코어 활용으로 특히 대규모 프로젝트에서 빌드를 보다 빠르게 수행합니다.C++ WinMD에 대한 참조가 있는 C++ 응용 프로그램의 증분 빌드도 훨씬 더 빠릅니다.
이러한 기능 외에 IDE에서 추가된 기능과 향상된 기능에 대한 자세한 내용은 Visual Studio 2013의 새로운 기능 및 이 문서에서 참조하는 다른 문서를 참조하십시오.