====== C++ ====== [[Bjarne Stroustrup]]이 [[C언어]]에 [[SIMULA]] 스타일의 [[객체지향]] 기능을 추가한다고 삽질하다가 [[흑막]]이 되어 버린 [[프로그래밍언어]]. [[ISO]]/IEC 14883으로 [[표준화]]되어 있다. C++를 객체지향 프로그래밍 언어라고 부를 수 없는 가장 큰 이유는 C++의 객체지향은 다른 객체지향 언어들에 비해서 그렇게 좋은 편이 아니기 때문(...)인데 이는 C랑 소스 레벨에서 호환되겠다는 당치도 않은 목표 때문에 동적인 구현이 필요한 많은 기능을 빼먹은 탓이다. 대신 C++는 [[컴파일시간]]에 최대한 많은 걸 하기 위해서 [[제네릭프로그래밍]] 및 [[템플릿]] [[메타프로그래밍]]을 강력하게 지원하기 때문에 결과적으로 언어 설계가 특이하게 나와 버렸다. [[루비]]를 만든 [[마츠모토유키히로]]가 [[최소놀람의법칙]]을 설명하면서 "옛날에 C++ 프로그래밍을 2년 내내 했는데 여전히 언어가 사람 놀래키더라"라고 C++를 깐 적이 있다.(([[http://www.artima.com/intv/ruby4.html|The Philosophy of Ruby]])) ===== 버전들 ===== 현재 널리 쓰이는 C++는 1998년에 표준화되어 ISO/IEC 14883:1998(흔히 C++98)이 되었다. (이전의 C++ 구현은 벤더에 따라 천차만별이었고 [[STL]]은 커녕 심지어 [[iostream]] 라이브러리가 없기도 했다.) 여기에 수정판으로 ISO/IEC 14883:2003(흔히 C++03)이 있긴 하지만 보통 구분은 별로 안 한다. C++98 및 C++03의 다음 버전은 ISO/IEC 14883:2011(흔히 C++0x 또는 [[Cpp11]])으로, 2011년 10월에 표준화가 완료되었다. 표준과는 별개로 현재 구현체의 지원은 가지각색인데(당연히 나온지 몇 년 안 되었으니...), 가장 쉽고 눈에 띄는 [[익명함수]] 문법은 이미 많은 최신 구현체(대표적으로 [[gcc]]와 [[MSVC]])에서 지원하여 별 문제 없이 쓸 수 있다. 다른 것들은 좀 더 기다려야 할 듯. {{tag>프로그래밍언어}}