C++: 두 판 사이의 차이

잔글편집 요약 없음
63번째 줄: 63번째 줄:


== 참고 자료 ==
== 참고 자료 ==
* [[http://www.lb-stuff.com/cc A Brief History]]
* [http://www.lb-stuff.com/cc C++ is not C "with classes"]
* [[http://uhmsdn.tistory.com/156 A Brief History of C++]]
* [http://uhmsdn.tistory.com/156 A Brief History of C++]


[[분류: 컴퓨터 프로그래밍]]
[[분류: 컴퓨터 프로그래밍]]

2015년 4월 17일 (금) 17:33 판

C++ / 씨 플러스 플러스, 씨쁠쁠등으로 읽기도 한다.

C++C 언어에서 파생된 프로그래밍 언어 중 하나로, 비야네 스트롭스트룹(Bjarne Stroustrup)이 만든 객체지향 언어이다. 초창기 코드 네임C with Classes[1]으로. 코드 네임에서 볼 수 있듯 C 언어객체지향 개념을 더하는 것이 시작이었다. 문법은 C 언어와 상당히 유사하지만 실질적으론 다른 언어로서 호환되지 않는다. 업데이트가 될수록 점점 문법이 C 언어와 달라지는 것을 보면.. 언젠간 못알아볼지도

특징

C의 저수준 접근을 그대로 허용하면서 객체지향 패러다임을 추가하였다. 덕분에 다른 객체지향 언어에 비해 복잡한 여러가지 내용이 들어가게 되었다.

메소드의 정적바인딩

다른 객체지향 언어와 달리 C++은 속도를 위하여 기본적인 멤버함수는 정적바인딩을 사용하며, virtual키워드를 사용했을 경우에만 동적바인딩을 하게된다

다중상속

클래스의 다중 상속이 허용되며, 이를 이용하여 javaC#의 인터페이스를 흉내낸다

컴파일 언어

후대에 나온 언어와 달리 C언어의 특징을 이어받아 컴파일을 하려 목적프로그램을 만들어낸다.

메모리

메모리의 동적 할당의 경우 자동으로 객체가 해제되지 않으며, 프로그래머가 직접호출해야 한다.

버전

C++ 1.0

최초의 C++는 C의 전처리기로 구현되었다. 전처리기의 이름은 Cfront. 이때의 C++는 C와의 하위호환성을 보장하는 방향으로 개발되었다. 함수와 연산자의 오버로딩을 지원하지만 overload라는 별도의 키워드를 써야 가능했다. 동적 다형성이 가상함수를 통해 구현됨으로서 객체지향의 모습을 조금이나마 보였다. 이 C++ 1.0에 추가된 개념 중 일부는 C에 영향을 주게 되었는데, 현재 C/C++ 공통적으로 많이 접할 수 있는 const 키워드가 C++에서 C로 역이식된 개념 중 하나다.

C++ 2.0

C++의 저자 비야네 스트롭스트룹은 C++ 2.0을 기능의 추가가 아닌 제약의 해제라고 소개했다. 다중 상속, 추상 클래스, 정적 멤버 함수, 멤버 포인터 연산자들이 추가되었다. 오버로딩이 불가능했던 연산자들의 오버로딩이 허용되었고, 기초적인 라이브러리들이 만들어지기 시작했다. 그리고 이 시기부터 프리프로세서가 아닌 진짜 C++ 컴파일러들이 만들어지기 시작했다.

C++ARM

C++ Annotated Reference Manual이 발표되면서 지금의 C++와 비슷한 모습을 갖추게 된 버전이다. 템플릿이 도입됨으로서 템플릿 메타프로그래밍이라는 새로운 흑마법패러다임을 열었다. 또한 표준 템플릿 라이브러리(STL)도 추가되어 지금까지 여러 알고리즘과 기능들을 지원하고 있다.

C++98

어떤 컴파일러를 사용하든 같은 결과를 보장하기 위해 ISO에서 제정한 최초의 C++ 표준으로, ISO/IEC 14882:1998 라는 정식 명칭을 가지고 있다. C++98부터 namespace 개념이 추가되어 표준 라이브러리는 std 네임스페이스에 속하게 되었으며, 기존 라이브러리와 혼동을 피하기 위해 이때부터 표준 라이브러리의 헤더에서 .h가 빠지게 되었다.

C++03

C++98을 대체하는 표준이지만 이름만 바뀌었지 사실상 C++98와 다른 점은 없다[2]! 하나 있다면 이전 표준에 누락된 벡터가 표준 라이브러리에 추가된 것.

C++TR1

C++ Technical Report 1이라는 이름의 보고서다. 줄여서 TR1이라 쓰고 읽는다. 한글로는 C++ 기술 보고서 1이지만 이렇게 읽는 사람은 아무도 없다. C++03 규격에서 확장에 필요한 라이브러리들을 정리한 것인데, Boost에 들어가 있는 라이브러리들이 상당수 존재한다. 튜플이나 정규 표현식, 스마트 포인터, 배열 컨테이너 등의 라이브러리들이 추가되었으며, 기존 C++ 표준 라이브러리와 구분하기 위해 std::tr1이라는 namespace로 정의되어 있다.

C++11

초기 개발 명은 C++0X라고 하여 10년도 이전에 나올 것이라 예상되었으나 때를 한참 넘겨 2011년에 공개되었다. C++11에서는 다른 프로그래밍 언어에서 사용되던 편리한 문법이 많이 추가 되었다

내역

  • 기존의 auto예약어의 기능이 없어지고 변수 선언시 초기화 값에 따라 변수형을 추론하여 생략을 가능하게 하였다
auto var = 1; //이 경우 var변수의 변수형은 int형이 된다.
auto var2 = new Person();//이 경우 var2의 변수형은 Person*이 된다.
  • 정적 배열, vector, list클래스의 경우 for문에서 자바의 for문과 같이 사용할 수 없다
int a[] = {1,2,3,4,5};
for(auto & it : a)
{
    std::cout<<it<<endl;
}
  • std::thread클래스가 추가되었고 멀티 스레딩을 지원하는 메모리 모델로 수정되었다. 또한 동기화 지원을 위한 std::mutex가 추가되었다.
  • 레퍼런스 카운드을 이용한 메모리 클래스인 std::shared_ptr와 std::weak_ptr가 추가되었다. 또한 std::auto_ptr은 비추천으로 바뀌었다.
  • 람다식및 익명함수가 추가되었다.
  • 기존의 함수포인터를 대체하는 std::function클래스가 추가되었다.
  • 가비지 컬렉션에 대한 내용이 표준에 추가되었다, 하지만 어떠한 컴파일러도 구현하지 않았다.
  • 시간에 관한 클래스 라이브러리가 추가되었다

C++14

C++14는 C++11의 마이너 업그래이드이다.

C++17 (예정)

주석

  1. 위키백과나 다른 곳에서는 C++의 원래 명칭을 C with Classes라고 소개하고 있지만, 비야네 스트롭스트룹은 C with Classes를 발표한 적이 없다. C with Classes는 C++의 개발 코드 네임인 셈. 예를 들면 윈도우 XP의 코드 네임은 Windows Whistler이지만 내부에서만 쓰는 이름이었고 공식적으로 발표된 적은 없다. 즉, 발표한적이 없는 C with Classes를 C++의 원래 이름이라고 말하는 것은 잘못된 것.
  2. C++ 저자인 비야네 스트롭스트룹은 FAQ 페이지에서 C++03은 C++98의 버그 수정 릴리즈라고 밝히고 있다.

참고 자료