Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

Visual Studio 2015에서 지원하는 C++11 핵심 기능 총정리


C++11이란?

C++11은 표준 C++ 언어의 한 버전으로, 2011년 8월 12일 국제표준화기구(ISO)의 승인을 받았습니다. 이후 C++14와 C++17이 차례로 발표되었습니다. C++11은 핵심 언어에 다양한 기능을 추가했으며, Visual C++는 C++11 기능 중 대부분을 구현하고 있습니다.

Visual Studio 2015의 주요 C++11 기능

nullptr

기존에는 정수 0이 널 포인터 값을 대신했지만, 이는 정수형으로의 암시적 변환이라는 문제점을 안고 있었습니다. C++11에서는 널 포인터 리터럴이 std::nullptr_t 타입으로 표현되며, 어떠한 암시적 변환도 일어나지 않아 더욱 안전한 코드 작성이 가능합니다.

람다(Lambda)

람다 식을 사용하면 함수를 코드 내부에서 지역적으로 정의할 수 있습니다. 이름 없는 익명 함수를 람다라고 부르며, std::function 객체가 요구되는 위치라면 어디서든 람다 식을 활용할 수 있습니다.

auto

이전 버전에서는 변수를 선언할 때 반드시 타입을 명시해야 했지만, C++11부터는 auto 키워드를 사용해 초기화 값으로부터 타입을 자동으로 추론할 수 있습니다. 덕분에 변수 선언이 한층 간결해졌습니다.

override와 final

C++11은 overridefinal이라는 두 가지 새로운 특수 식별자를 도입했습니다. override는 해당 메서드가 기본 클래스의 가상 메서드를 재정의한다는 것을 명시하고, final은 파생 클래스에서 해당 가상 메서드를 더 이상 재정의할 수 없음을 나타냅니다.

삭제된 함수와 디폴트 함수

=delete;로 선언된 삭제된 함수는 객체 복사를 금지하는 등 특정 연산을 차단하는 데 유용합니다. 반면 =default;로 선언된 디폴트 함수는 컴파일러에게 해당 함수의 기본 구현을 생성하도록 지시합니다.

강력한 타입의 열거형(enum class)

기존의 전통적인 enum은 열거자 이름을 주변 스코프로 그대로 노출하는 문제가 있었습니다. C++11에서 enum class 키워드로 선언하면 열거자가 주변 스코프로 유출되지 않아 이름 충돌을 효과적으로 방지할 수 있습니다.

static_assert와 타입 특성(Type Traits)

static_assert는 컴파일 시점에 단언(assertion) 검사를 수행합니다. 조건이 참이면 아무런 출력이 없지만, 거짓이면 컴파일 오류 메시지를 표시하여 잘못된 코드를 실행 전에 조기에 잡아낼 수 있습니다.

범위 기반 for 루프

C++11은 컬렉션을 손쉽게 순회하기 위한 범위 기반 for 루프를 도입했습니다. C 스타일 배열은 물론 STL 컨테이너 등도 간결하게 반복 처리할 수 있으며, 'foreach' 패러다임을 완벽하게 지원합니다.