c++-faq 전문가를 - 확실한 C++책 가이드 및 목록





위한 개정 (2)


초보자

입문, 이전 프로그래밍 경험 없음

  • C ++ Primer * (Stanley Lippman, Josée Lajoie, Barbara E. Moo) ( C ++ 11 용으로 업데이트 됨 ) 1k 페이지에서 제공되는이 책은 C ++에 대한 매우 철저한 소개로서이 언어의 모든 내용을 매우 액세스 가능한 형식으로 다룹니다 그리고 매우 상세하게. 다섯 번째 버전 (2012 년 8 월 16 일에 발표 됨)은 C ++ 11을 다룹니다. [Review]

  • 프로그래밍 : C ++을 사용한 원칙 및 실습 (Bjarne Stroustrup, 2nd Edition - 2014 년 5 월 25 일) ( C ++ 11 / C ++ 14 용으로 업데이트 됨 ) 언어 작성자가 C ++를 사용하여 프로그래밍하는 방법을 소개합니다. 이전 프로그래밍 경험이 없다고 가정하지만, 초보자 만이 아닙니다.

* C + + Primer Plus (Stephen Prata)와 혼동되어서는 안되는 review 입니다.

이전 프로그래밍 경험이있는 입문

  • C ++ 둘러보기 (Bjarne Stroustrup) ( C ++ 2 판 ) 17 "둘러보기"는 모든 표준 C ++ (언어 및 표준 라이브러리 및 C ++ 사용법)에 대한 빠른 자습서입니다 (약 180 페이지 및 14 장). 11 ) C ++을 이미 알고 있거나 적어도 숙련 된 프로그래머 인 사람들에게는 적당히 높은 수준입니다. 이 책은 C ++ 프로그래밍 언어, 4 판의 2-5 장을 구성하는 자료의 확장 버전입니다.

  • Accelerated C ++ (Andrew Koenig and Barbara Moo, 1st Edition - 2000 년 8 월 24 일) 이것은 기본적으로 C ++ 입문서 와 동일한 근거를 다루지 만 네 번째 공간에서도 마찬가지입니다. 이것은 프로그래밍 에 대한 소개가 아니라, 이전에 다른 언어로 프로그래밍 된 사람들을위한 C ++에 대한 소개이기 때문에 크게 나타납니다. 가파른 학습 곡선을 가지고 있지만 이에 대처할 수있는 사람들에게는 언어에 대한 매우 간략한 소개입니다. (역사적으로, 그것은 언어를 가르치기위한 현대적인 접근법을 사용하는 초보자가 처음으로 책을 읽음으로써 새로운 지평을 열었습니다.) 이것에도 불구하고, 가르치는 C ++은 순전히 C ++ 98입니다. [Review]

모범 사례

  • 효과적인 C ++ (Scott Meyers, 3rd Edition - 2005 년 5 월 22 일) 이것은 C ++ 프로그래머가 읽어야 할 최고의 두 번째 책인 것을 목표로 작성되었으며 성공했습니다. 이전 버전은 C에서 오는 프로그래머를 대상으로했으며, 세 번째 버전에서는이를 변경하고 Java와 같은 언어에서 프로그래머를 대상으로합니다. 그것은 ~ 접근하기 쉬운 (그리고 즐거운) 스타일로 그들의 이론적 근거와 함께 ~ ~ 50 가지의 기억하기 쉬운 엄지 손가락 규칙을 제시합니다. C ++ 11 및 C ++ 14의 경우 예와 몇 가지 문제가 오래되었고 효과적인 현대 C ++가 선호됩니다. [Review]

  • Effective Modern C ++ (Scott Meyers) 이것은 기본적으로 C ++ 03에서 C ++ 11 및 C ++ 14로 전환하는 C ++ 프로그래머를 대상으로 한 Effective C ++ 의 새 버전입니다.

  • 효과적인 STL (Scott Meyers) 이것은 효과적인 C ++ 이 언어 전체에서했던 표준 라이브러리 부분에 똑같이하는 것을 목표로합니다. 이는 이론적 근거와 함께 엄지 손가락 규칙을 제시합니다. [Review]

중급

  • 보다 효과적인 C ++ (Scott Meyers) Effective C ++ 보다 훨씬 더 엄지 손가락입니다. 첫 번째 책만큼 중요하지는 않지만 여전히 잘 알고 있습니다.

  • 탁월한 C ++ (Herb Sutter) 퍼즐 모음으로 제시되는이 책에는 다양한 리소스에 대한 심도있는 적용 외에도 Resource Acquisition is Initialization (RAII)을 통해 C ++의 적절한 리소스 관리 및 예외 안전성에 대한 최고의 철저한 토론이 있습니다. pimpl 관용구, 이름 조회, 우수한 클래스 디자인 및 C ++ 메모리 모델을 비롯한 다른 주제를 다룹니다. [Review]

  • 더 뛰어난 C ++ (Herb Sutter) C ++ 의 효과적인 객체 지향 프로그래밍과 STL의 올바른 사용에 대한 논의 외에도 Exceptional C ++ 에서 다루지 않은 추가 예외 안전 주제를 다룹니다. [Review]

  • 뛰어난 C ++ 스타일 (Herb Sutter) 일반적인 프로그래밍, 최적화 및 리소스 관리에 대해 설명합니다. 이 책에는 비 멤버 함수와 단일 책임 원칙을 사용하여 C ++로 모듈러 코드를 작성하는 방법에 대한 훌륭한 설명이 있습니다. [Review]

  • C ++ 코딩 표준 (Herb Sutter 및 Andrei Alexandrescu) "코딩 표준"은 "내 코드를 몇 개의 공간에 들여 써야합니까?"라는 의미가 아닙니다.이 책에는 올바른 모범 사례, 관용구 및 일반적인 함정이 포함되어있어 올바른, 이해할 수 있고 효율적인 C ++ 코드. [Review]

  • C ++ Templates : The Complete Guide (David Vandevoorde와 Nicolai M. Josuttis) 이것은 C ++ 11 이전의 템플릿에 대한 책입니다. 아주 기초에서부터 가장 진보 된 템플릿 메타 프로그래밍에 이르기까지 모든 것을 다루고 템플릿 작동 방식의 모든 세부 사항 (개념적으로나 구현 방식 모두)을 설명하고 많은 일반적인 함정에 대해 설명합니다. 부록의 ODR (One Definition Rule) 및 과부하 해결에 대한 훌륭한 요약을 제공합니다. C ++ 11, C ++ 14 및 C ++ 17을 다루는 두 번째 에디션 이 이미 게시되었습니다. [Review]

많은

  • Modern C ++ Design (Andrei Alexandrescu) 고급 제네릭 프로그래밍 기술에 관한 획기적인 책. 정책 기반 디자인, 유형 목록 및 기본 제네릭 프로그래밍 관례를 소개 한 다음 작은 객체 할당 자, 펑터, 팩토리, 방문자 및 다중 메서드를 포함하여 유용한 디자인 패턴을 얼마나 효율적으로, 모듈 방식으로 구현할 수 있는지, 일반 프로그래밍을 사용하여 깔끔하게 구현할 수 있는지 설명합니다. . [Review]

  • C ++ 템플릿 메타 프로그래밍 (David Abrahams and Aleksey Gurtovoy)

  • C ++ Concurrency in Action (Anthony Williams) 멀티 스레드 응용 프로그램을 설계하고 디버깅하는 문제는 물론 스레드 라이브러리, 원자학 라이브러리, C ++ 메모리 모델, 잠금 및 뮤텍스를 비롯하여 C ++ 11 동시성 지원을 다루는 책입니다.

  • 고급 C ++ 메타 프로그래밍 (Davide Di Gennaro) TMP 기술에 대한 사전 C ++ 11 설명서로 이론보다는 실습에 중점을 둡니다. 이 책에는 많은 종류의 발췌 문장이 있습니다. 그 중 일부는 형식 특성에 의해 쓸모 없게 만들어졌지만 그럼에도 불구하고 기술은 알기에 유용합니다. 기발한 서식 지정 / 편집을 수행 할 수 있다면 Alexandrescu보다 읽기 쉽고 틀림없이 보람이 있습니다. 보다 숙련 된 개발자에게는 일반적으로 광범위한 경험을 통해서만 얻을 수있는 C ++ (어색함)의 어두운 구석에 대해 뭔가를 얻을 수있는 좋은 기회가 있습니다.

참조 스타일 - 모든 레벨

  • C ++ 프로그래밍 언어 (Bjarne Stroustrup) ( C ++ 11 용으로 업데이트 됨 ) 작성자의 C ++에 대한 고전적 소개. 고전적인 K & R과 평행을 이루기 위해 쓰여진이 책은 실제로 이와 매우 비슷하며 핵심 언어에서 표준 라이브러리, 프로그래밍 패러다임부터 언어 철학까지 모든 것을 다룹니다. [Review] Note : C ++ 표준의 모든 릴리즈는 다음 질문에서 추적됩니다 : 현재 C ++ 표준은 어디에서 찾을 수 있습니까 ?

  • C ++ 표준 라이브러리 자습서 및 참조 (Nicolai Josuttis) ( C ++ 11 용으로 업데이트 됨 ) C ++ 표준 라이브러리에 대한 소개 및 참조. 두 번째 에디션 (2012 년 4 월 9 일에 릴리스 됨)은 C ++ 11을 다룹니다. [Review]

  • C ++ 입출력 스트림과 로케일 (Angelika Langer and Klaus Kreft) 스트림과 로케일에 대해 알고 싶다면 확실한 답을 찾을 수있는 곳이 하나 있습니다. [Review]

C ++ 11 / 14 / 17 / ... 참고 자료 :

  • C ++ 11 / 14 / 17 표준 (INCITS / ISO / IEC 14882 : 2011/2014/2017) 이것은 물론 C ++가 아닌 모든 것을 최종적으로 조정하는 것입니다. 그러나 경험있는 사용자가 자신의 이해를 위해 상당한 시간과 노력을 기울일 용의가있는 참고 용으로 의도 된 것입니다. C ++ 17 표준은 198 스위스 프랑을 위해 전자 형식으로 출시됩니다.

  • C ++ 17 표준을 사용할 수 있지만 경제적 인 형태는 아닙니다 17 198 스위스 프랑 (약 200 달러)입니다. 대부분의 사람들에게 표준화 이전최종 초안 은 적절하고 (무료입니다.) 많은 사람들은 C ++ 20에 포함될 가능성이있는 새로운 기능을 문서화하여 보다 새로운 초안 을 선호합니다.

  • 새로운 C ++ (C ++ 11 / 14) 개요 (Scott Meyers) ( C ++ 1y / C ++ 14 용으로 업데이트 됨 ) 3 차원 코드의 프레젠테이션 자료 (슬라이드 및 일부 강의 노트) 스콧 마이어스 (Scott Meyers)가 제공하는 C + +에 대한 존경받는 저자입니다. 항목 목록이 짧지 만 품질은 높습니다.

  • C ++ 핵심 지침 (C ++ 11 / 14 / 17 / ...) (Bjarne Stroustrup 및 Herb Sutter 편집)은 최신 C ++ 사용 지침 세트로 구성된 진화하는 온라인 문서입니다. 이 지침은 인터페이스, 자원 관리, 메모리 관리 및 응용 프로그램 아키텍처 및 라이브러리 디자인에 영향을 미치는 동시성과 같은 상대적으로 높은 수준의 문제에 중점을 둡니다. 이 프로젝트는 Bjarne Stroustrup과 다른 사람들이 CppCon'15 에서 발표했으며 지역 사회의 공헌을 환영합니다. 대부분의 지침에는 가능한 도구 지원에 대한 논리적 인 설명과 예제가 포함되어 있습니다. 많은 규칙이 정적 분석 도구로 자동 검사 가능하도록 특별히 설계되었습니다.

  • C ++ Super-FAQ (Marshall Cline, Bjarne Stroustrup 및 기타)는 이전에 Marshall Cline과 Bjarne Stroustrup이 개별적으로 유지 보수 한 C ++ FAQ를 통합하고 새로운 기여도를 통합하는 표준 C ++ Foundation의 노력입니다. 항목은 주로 중급 수준의 문제를 다루며 종종 유머러스 한 음색으로 작성됩니다. 모든 항목이 C ++ 표준의 최신 버전으로 완전히 업데이트되지는 않습니다.

  • cppreference.com (C ++ 03 / 11 / 14 / 17 / ...) (Nate Kohl이 시작)은 기본 핵심 언어 기능을 요약하고 C ++ 표준 라이브러리에 대한 광범위한 문서를 제공하는 위키입니다. 문서는 매우 정확하지만 공식 표준 문서보다 읽기 쉽고 wiki 특성으로 인해 더 나은 탐색 기능을 제공합니다. 프로젝트는 모든 버전의 C ++ 표준을 문서화하며 사이트에서는 특정 버전의 디스플레이를 필터링 할 수 있습니다. 이 프로젝트는 CppCon'14에서 Nate Kohl발표했습니다 .

고전 / 이전

참고 : 이 책에 포함 된 일부 정보는 최신 정보가 아니거나 더 이상 모범 사례로 간주되지 않을 수 있습니다.

  • C ++의 설계와 진화 (Bjarne Stroustrup) 언어가 왜 그런지 를 알고 싶다면이 책에서 대답을 찾을 수 있습니다. 이것은 C ++ 의 표준화 이전의 모든 것을 다룹니다.

  • Ruminations on C ++ - (Andrew Koenig, Barbara Moo) [Review]

  • 고급 C ++ 프로그래밍 스타일 및 관용구 (James Coplien) 패턴 이동의 전신 인 C ++ 고유의 "숙어"를 많이 묘사합니다. 그것은 확실히 좋은 책이며, 시간을 절약 할 수 있다면 읽을만한 가치가 있을지 모르지만 현재의 C ++에 대해서는 꽤 오래되고 최신이 아닙니다.

  • 대규모 C ++ 소프트웨어 설계 (John Lakos) Lakos는 매우 큰 C ++ 소프트웨어 프로젝트를 관리하는 기술을 설명합니다. 물론 최신 정보 만 있다면 좋은 읽을 거리입니다. C ++ 98보다 오래 전에 작성되었으며 대규모 프로젝트에 중요한 여러 기능 (예 : 네임 스페이스)을 놓치고 있습니다. 커다란 C ++ 소프트웨어 프로젝트에서 작업해야한다면, 그것을 읽으면서 읽을 수도 있습니다. 단 한 곡 이상을 가져 가야합니다. 새 판의 첫 권은 2018 년에 나옵니다 .

  • C ++ 객체 모델 내부 (Stanley Lippman) 가상 상거래 기능이 일반적으로 구현되는 방법과 다중 상속 시나리오에서 기본 객체가 메모리에 일반적으로 배치되는 방법과 이것이 성능에 미치는 영향을 알고 싶다면 여기에서 그러한 주제에 대한 철저한 토론을 찾아보십시오.

  • Annotated C ++ Reference Manual (Bjarne Stroustrup, Margaret A. Ellis)이 책은 템플릿, 예외, 네임 스페이스 및 새로운 형변환이 아직 도입되지 않은 1989 년 C ++ 2.0 버전을 탐구한다는 점에서 구식입니다. 그러나이 책은 언어의 이론적 근거, 가능한 구현 및 기능을 설명하는 시간의 전체 C ++ 표준을 설명합니다. 이것은 C ++의 프로그래밍 원칙과 패턴을 배우는 것이 아니라 C ++ 언어의 모든 측면을 이해하는 책입니다.

  • C ++로 사고하기 (Bruce Eckel, 2nd Edition, 2000). 2 권; 튜토리얼 스타일의 무료 인트로 레벨 북 세트입니다. 다운로드 : vol 1 , vol 2 . 불행히도 공식 에라타 목록이없는 사소한 오류 (예 : 임시 유지가 자동으로 유지됨)에 의해 손상되었습니다. 일부 타사 정오표 목록은 http://www.computersciencelab.com/Eckel.htm 에서 구할 수 있지만 분명히 유지 관리되지는 않습니다.

  • Scientific and Engineering C ++ : 고급 기법 및 예제 소개 (John Barton 및 Lee Nackman) 수치 방법과 관련하여 C ++에서 사용할 수있는 모든 기능을 설명하고 사용하려고 시도한 포괄적이고 세부적인 책입니다. 그것은 당시 호기심 반복 템플릿 패턴 (CRTP, Barton-Nackman 트릭이라고도 함)과 같은 몇 가지 새로운 기법을 도입했습니다. 그것은 차원 분석 및 자동 차별화와 같은 여러 기술을 개척했습니다. 표현 파서 (expression parser)에서부터 Lapack 래퍼 (wrapper)에 이르기까지 많은 컴파일 및 유용한 코드가 제공되었습니다. 이 코드는 http://www.informit.com/store/scientific-and-engineering-c-plus-plus-an-introduction-9780201533934 계속 사용할 수 있습니다. 불행하게도이 책은 스타일과 C ++ 기능으로 다소 시대에 뒤떨어졌지만 당시 (1994 년, pre-STL)는 엄청난 여행이었습니다. 역학 상속에 대한 장은 이해하기가 약간 복잡하고별로 유용하지 않습니다. 이동 의미론과 STL에서 배운 교훈을 포함하는이 고전적인 책의 업데이트 된 버전은 매우 좋을 것입니다.

이 질문은 매년 발행되는 수십 가지의 나쁜 C ++ 서적 중에서 몇 가지 진주를 수집하려고 시도합니다.

인터넷에서 찾아 볼 수있는 자습서에서 자주 선택되는 다른 많은 프로그래밍 언어와 달리 잘 작성된 C ++ 서적을 공부하지 않고도 C ++을 빠르게 선택할 수있는 사람은 거의 없습니다. 이렇게하기에는 너무 크고 복잡합니다. 실제로, 너무 크고 복잡해서 거기에 많은 아주 나쁜 C ++ 책 들이 있습니다. 그리고 우리는 나쁜 스타일에 대해 이야기하는 것이 아니라 눈에 띄게 명백한 사실적 오류를 자랑 하고 심하게 프로그래밍 스타일을 조장하는 것과 같은 것들을 말합니다 .

가급적 C ++ 대화방 에서 귀하의 추가 사항을 논의한 , 허용되는 답변을 편집하여 양질의 책 과 대략적인 기술 수준을 제공 하십시오 . (일반인은 추천에 동의하지 않으면 자신의 일을 무자비하게 취소 할 수 있습니다.) 개인적으로 읽거나 이익을 얻은 각 도서에 대한 간략한 설명을 추가하십시오. 품질, 머리글 등을 자유롭게 토론하십시오. 기준에 맞는 설명서가 목록에 추가됩니다. C 및 C ++ 사용자 협회 (ACCU)에서 검토 한 책에는 검토 링크가 있습니다.

* 참고 : FAQ 및 기타 리소스는 C ++ 태그 정보 및 c ++ - faq 에서 찾을 수 있습니다.




scanf ( "% s")는 문자열을 구문 분석하고 임의의 공백 문자 (공백, 탭, 줄 바꿈)를 찾기 때문에이 두 번째 예제 (scanf ()에서)가 더 느린 이유가있을 수 있습니다.

또한 예, CPython은 하드 디스크 읽기를 피하기 위해 캐싱을 수행합니다.





c++ c++-faq