Hướng dẫn và danh sách sách C ++ dứt khoát


4243

Câu hỏi này cố gắng thu thập một vài viên ngọc trai trong số hàng chục cuốn sách C ++ xấu được xuất bản hàng năm.

Không giống như nhiều ngôn ngữ lập trình khác, thường được chọn khi đang di chuyển từ các hướng dẫn được tìm thấy trên Internet, rất ít người có thể nhanh chóng chọn C ++ mà không cần nghiên cứu một cuốn sách C ++ được viết tốt. Đó là cách quá lớn và phức tạp để làm điều này. Trên thực tế, nó rất lớn và phức tạp, có rất nhiều sách C ++ rất tệ ngoài kia. Và chúng ta không nói về phong cách xấu, nhưng những thứ như thể thao lỗi rõ ràng thực sự rõ ràngthúc đẩy phong cách lập trình tồi tệ .

Vui lòng chỉnh sửa câu trả lời được chấp nhận để cung cấp sách chất lượng và mức độ kỹ năng gần đúng - tốt nhất là sau khi thảo luận về sự bổ sung của bạn trong phòng trò chuyện C ++ . . Hãy tranh luận về chất lượng, tiêu đề, vv Những cuốn sách đáp ứng các tiêu chí sẽ được thêm vào danh sách. Sách có đánh giá của Hiệp hội Người dùng C và C ++ (ACCU) có liên kết đến đánh giá.

* Lưu ý: Câu hỏi thường gặp và các tài nguyên khác có thể được tìm thấy trong thông tin thẻ C ++ và bên dưới.

Câu trả lời:


4893

Người bắt đầu

Nhập môn, không có kinh nghiệm lập trình trước

  • C ++ Primer * (Stanley Lippman, Josée Lajoie và Barbara E. Moo) ( cập nhật cho C ++ 11 ) Đến với 1k trang, đây là phần giới thiệu rất kỹ về C ++ bao gồm mọi thứ bằng ngôn ngữ ở định dạng rất dễ tiếp cận và rất chi tiết. Phiên bản thứ năm (phát hành ngày 16 tháng 8 năm 2012) bao gồm C ++ 11. [Ôn tập]

  • Lập trình: Nguyên tắc và thực hành sử dụng C ++ (Bjarne Stroustrup, tái bản lần 2 - ngày 25 tháng 5 năm 2014) ( cập nhật cho C ++ 11 / C ++ 14 ) Giới thiệu về lập trình bằng C ++ của người tạo ngôn ngữ. Đọc tốt, cho rằng không có kinh nghiệm lập trình trước đó, nhưng không chỉ dành cho người mới bắt đầu.

* Không nên nhầm lẫn với C ++ Primer Plus (Stephen Prata), với một đánh giá ít thuận lợi hơn đáng kể .

Nhập môn, với kinh nghiệm lập trình trước

  • Chuyến tham quan về C ++ (Bjarne Stroustrup) ( ấn bản thứ 2 cho C ++ 17 ) Chuyến tham quan trực tiếp là một tổng quan hướng dẫn nhanh (khoảng 180 trang và 14 chương) về tất cả C ++ (thư viện ngôn ngữ và tiêu chuẩn và sử dụng C ++ 11 ) ở mức độ cao vừa phải cho những người đã biết C ++ hoặc ít nhất là những lập trình viên có kinh nghiệm. Cuốn sách này là phiên bản mở rộng của tài liệu cấu thành Chương 2-5 của Ngôn ngữ lập trình C ++, ấn bản thứ 4.

  • Đã tăng tốc C ++ (Andrew Koenig và Barbara Moo, Phiên bản đầu tiên - ngày 24 tháng 8 năm 2000) Điều này về cơ bản bao gồm cùng mặt đất với C ++ Primer , nhưng lại chiếm một phần tư không gian của nó. Điều này phần lớn là vì nó không cố gắng giới thiệu về lập trình , mà là giới thiệu về C ++ cho những người trước đây đã lập trình bằng một số ngôn ngữ khác. Nó có một đường cong học tập dốc hơn, nhưng, đối với những người có thể đối phó với điều này, nó là một giới thiệu rất nhỏ gọn về ngôn ngữ. (Trong lịch sử, nó đã phá vỡ nền tảng mới bằng cách là cuốn sách dành cho người mới bắt đầu sử dụng cách tiếp cận hiện đại để dạy ngôn ngữ.) Mặc dù vậy, C ++ mà nó dạy hoàn toàn là C ++ 98. [Ôn tập]

Thực hành tốt nhất

  • C ++ hiệu quả (Scott Meyers, Ấn bản thứ 3 - 22 tháng 5 năm 2005) Cuốn sách này được viết với mục đích trở thành cuốn sách thứ hai tốt nhất mà các lập trình viên C ++ nên đọc, và nó đã thành công. Các phiên bản trước đó nhằm vào các lập trình viên đến từ C, phiên bản thứ ba thay đổi điều này và nhắm vào các lập trình viên đến từ các ngôn ngữ như Java. Nó trình bày ~ 50 quy tắc ngón tay cái dễ nhớ cùng với lý do của chúng theo phong cách rất dễ tiếp cận (và thú vị). Đối với C ++ 11 và C ++ 14, các ví dụ và một vài vấn đề đã lỗi thời và nên sử dụng C ++ hiện đại hiệu quả. [Ôn tập]

  • Hiệu quả hiện đại C ++ (Scott Meyers) Đây về cơ bản là phiên bản mới của C ++ hiệu quả , nhằm vào các lập trình viên C ++ thực hiện quá trình chuyển đổi từ C ++ 03 sang C ++ 11 và C ++ 14.

  • STL hiệu quả (Scott Meyers) Điều này nhằm mục đích làm tương tự với một phần của thư viện tiêu chuẩn đến từ STL, điều mà C ++ hiệu quả đã làm với ngôn ngữ nói chung: Nó trình bày các quy tắc ngón tay cái cùng với lý do của chúng. [Ôn tập]

Trung gian

  • C ++ hiệu quả hơn (Scott Meyers) Thậm chí nhiều quy tắc hơn so với C ++ hiệu quả . Không quan trọng như những cuốn sách đầu tiên, nhưng vẫn tốt để biết.

  • C ++ đặc biệt (Herb Sutter) Được trình bày dưới dạng một bộ câu đố, đây là một trong những cuộc thảo luận tốt nhất và kỹ lưỡng về quản lý tài nguyên phù hợp và an toàn ngoại lệ trong C ++ thông qua Tài nguyên thu thập (RAII) ngoài phạm vi bảo hiểm chuyên sâu về các chủ đề khác bao gồm thành ngữ pimpl, tra cứu tên, thiết kế lớp tốt và mô hình bộ nhớ C ++. [Ôn tập]

  • C ++ khác (Herb Sutter) Bao gồm các chủ đề an toàn ngoại lệ bổ sung không có trong C ++ ngoại lệ , ngoài việc thảo luận về lập trình hướng đối tượng hiệu quả trong C ++ và sử dụng đúng STL. [Ôn tập]

  • Phong cách C ++ đặc biệt (Herb Sutter) Thảo luận về lập trình chung, tối ưu hóa và quản lý tài nguyên; cuốn sách này cũng có một giải thích tuyệt vời về cách viết mã mô-đun trong C ++ bằng cách sử dụng các hàm không phải thành viên và nguyên tắc trách nhiệm duy nhất. [Ôn tập]

  • Các tiêu chuẩn mã hóa C ++ (Herb Sutter và Andrei Alexandrescu) Các tiêu chuẩn mã hóa ở đây không có nghĩa là có bao nhiêu khoảng trống mà tôi nên thụt mã của mình? Cuốn sách này chứa 101 thực tiễn tốt nhất, thành ngữ và những cạm bẫy phổ biến có thể giúp bạn viết mã C ++ chính xác, dễ hiểu và hiệu quả. [Ôn tập]

  • C ++ Templates: The Complete Guide (David Vandevoorde và Nicolai M. Josuttis) Đây là những cuốn sách về các mẫu như họ tồn tại trước khi C ++ 11. Nó bao gồm mọi thứ, từ những điều cơ bản đến một số siêu lập trình mẫu tiên tiến nhất và giải thích mọi chi tiết về cách thức hoạt động của các mẫu (cả về mặt khái niệm và cách chúng được thực hiện) và thảo luận về nhiều cạm bẫy phổ biến. Có bản tóm tắt xuất sắc của Quy tắc Một Định nghĩa (ODR) và độ phân giải quá tải trong các phụ lục. Một ấn bản thứ hai bao gồm C ++ 11, C ++ 14 và C ++ 17 đã được đã được công bố. [Ôn tập]

  • C ++ 17 - Hướng dẫn hoàn chỉnh (Nicolai M. Josuttis) Cuốn sách này mô tả tất cả các tính năng mới được giới thiệu trong Tiêu chuẩn C ++ 17 bao gồm mọi thứ từ những biến đơn giản như 'Biến nội tuyến', 'constexpr nếu' hoàn toàn thành 'Đa hình Tài nguyên bộ nhớ 'và' Mới và Xóa với Dữ liệu được phân bổ quá mức '.


Nâng cao

  • Modern C ++ Design (Andrei Alexandrescu) Một cuốn sách đột phá về các kỹ thuật lập trình chung tiên tiến. Giới thiệu thiết kế dựa trên chính sách, danh sách loại và thành ngữ lập trình chung cơ bản sau đó giải thích có bao nhiêu mẫu thiết kế hữu ích (bao gồm phân bổ đối tượng nhỏ, functor, nhà máy, khách truy cập và đa phương thức) có thể được triển khai hiệu quả, mô đun hóa và sử dụng lập trình chung . [Ôn tập]

  • Lập trình siêu mẫu C ++ (David Abrahams và Aleksey Gurtovoy)

  • C ++ concurrency In Action (Anthony Williams) Một cuốn sách bao gồm hỗ trợ đồng thời C ++ 11 bao gồm thư viện luồng, thư viện nguyên tử, mô hình bộ nhớ C ++, khóa và mutexes, cũng như các vấn đề về thiết kế và gỡ lỗi các ứng dụng đa luồng. Một ấn bản thứ hai bao gồm C ++ 14 và C ++ 17 đã được đã được công bố.

  • Chương trình siêu dữ liệu C ++ nâng cao (Davide Di Gennaro) Hướng dẫn sử dụng kỹ thuật TMP trước C ++ 11, tập trung nhiều vào thực hành hơn lý thuyết. Có rất nhiều đoạn trích trong cuốn sách này, một số trong số đó đã bị lỗi thời bởi các đặc điểm loại, nhưng các kỹ thuật, dù sao cũng hữu ích để biết. Nếu bạn có thể đưa ra định dạng / chỉnh sửa kỳ quặc, nó sẽ dễ đọc hơn Alexandrescu, và có thể nói là bổ ích hơn. Đối với các nhà phát triển có nhiều kinh nghiệm hơn, có nhiều khả năng bạn có thể chọn một cái gì đó về một góc tối của C ++ (một sự giải quyết) thường chỉ xuất hiện thông qua kinh nghiệm sâu rộng.

  • Lập trình chức năng trong C ++ (Ivan ukić) Cuốn sách giới thiệu cho người đọc mô hình chức năng trong C ++ hiện đại. Nó bao gồm các khía cạnh lý thuyết và mã với một loạt các ví dụ và sơ đồ. Tác giả có kinh nghiệm trong giảng dạy và sử dụng nó để hướng dẫn người đọc thông suốt các khía cạnh khác nhau của lập trình chức năng.


Kiểu tham chiếu - Tất cả các cấp

  • Ngôn ngữ lập trình C ++ (Bjarne Stroustrup) ( được cập nhật cho C ++ 11 ) Giới thiệu cổ điển về C ++ bởi người tạo ra nó. Được viết để song song với K & R cổ điển, điều này thực sự đọc rất giống nó và bao gồm tất cả mọi thứ từ ngôn ngữ cốt lõi đến thư viện tiêu chuẩn, để lập trình các mô hình cho triết lý của ngôn ngữ. [Đánh giá] Lưu ý: Tất cả các bản phát hành của tiêu chuẩn C ++ được theo dõi trong câu hỏi này: Tôi tìm thấy tiêu chuẩn C ++ hiện tại ở đâu .

  • C ++ chuẩn Thư viện Tutorial và tham khảo (Nicolai Josuttis) ( cập nhật cho C ++ 11 ) Các giới thiệu và tài liệu tham khảo cho Thư viện chuẩn C ++. Phiên bản thứ hai (phát hành vào ngày 9 tháng 4 năm 2012) bao gồm C ++ 11. [Ôn tập]

  • Các luồng và địa điểm IO của C ++ (Angelika Langer và Klaus Kreft) Có rất ít điều để nói về cuốn sách này ngoại trừ, nếu bạn muốn biết bất cứ điều gì về các luồng và địa phương, thì đây là nơi để tìm câu trả lời dứt khoát. [Ôn tập]

C ++ 11/14/17 / Hoài Tham khảo:

  • C ++ 11 / 14 / 17 Chuẩn (INCITS / ISO / IEC 14882: 2011/2014/2017) Điều này, tất nhiên, là trọng tài cuối cùng của tất cả những gì là hoặc không phải là C ++. Tuy nhiên, hãy lưu ý rằng nó chỉ nhằm mục đích tham khảo cho người dùng có kinh nghiệm sẵn sàng dành thời gian và nỗ lực đáng kể cho sự hiểu biết của nó. Tiêu chuẩn C ++ 17 được phát hành dưới dạng điện tử cho 198 Franc Thụy Sĩ.

  • Tiêu chuẩn C ++ 17 có sẵn, nhưng dường như không phải ở dạng kinh tế - trực tiếp từ ISO, nó có giá 198 Franc Thụy Sĩ (khoảng 200 đô la Mỹ). Đối với hầu hết mọi người, bản thảo cuối cùng trước khi tiêu chuẩn hóa là quá đủ (và miễn phí). Nhiều người sẽ thích một bản nháp thậm chí mới hơn , ghi lại các tính năng mới có khả năng được đưa vào C ++ 20.

  • Tổng quan về C ++ mới (C ++ 11/14) (chỉ PDF) (Scott Meyers) ( cập nhật cho C ++ 14 ) Đây là các tài liệu thuyết trình (slide và một số ghi chú bài giảng) của khóa đào tạo ba ngày được cung cấp bởi Scott Meyers, một tác giả rất được kính trọng trên C ++. Mặc dù danh sách các mặt hàng ngắn, chất lượng cao.

  • Các Hướng dẫn Lõi ++ C (C ++ 11/14/17 / ...) (thay đổi nội dung bởi Bjarne Stroustrup và Herb Sutter) là một tài liệu trực tuyến đang phát triển bao gồm một tập hợp các hướng dẫn cho việc sử dụng hiện đại, C ++ tốt. Các hướng dẫn được tập trung vào các vấn đề tương đối cao hơn, chẳng hạn như giao diện, quản lý tài nguyên, quản lý bộ nhớ và đồng thời ảnh hưởng đến kiến ​​trúc ứng dụng và thiết kế thư viện. Dự án được công bố tại CppCon'15 bởi Bjarne Stroustrup và những người khác và hoan nghênh sự đóng góp từ cộng đồng. Hầu hết các hướng dẫn được bổ sung với một lý do và các ví dụ cũng như các cuộc thảo luận về hỗ trợ công cụ có thể. Nhiều quy tắc được thiết kế đặc biệt để có thể tự động kiểm tra bằng các công cụ phân tích tĩnh.

  • Các C ++ Super-FAQ (Marshall Cline, Bjarne Stroustrup và những người khác) là một nỗ lực của Standard C ++ Foundation để thống nhất C ++ Câu Hỏi Thường Gặp trước duy trì độc lập bởi Marshall Cline và Bjarne Stroustrup và cũng kết hợp những đóng góp mới. Các mục chủ yếu giải quyết các vấn đề ở cấp độ trung gian và thường được viết với giọng điệu hài hước. Không phải tất cả các mục có thể được cập nhật đầy đủ với phiên bản mới nhất của tiêu chuẩn C ++.

  • cppreference.com (C ++ 03/11/14/17 / ( ) (do Nate Kohl khởi xướng) là một wiki tóm tắt các tính năng ngôn ngữ cốt lõi cơ bản và có tài liệu mở rộng về thư viện chuẩn C ++. Tài liệu này rất chính xác nhưng dễ đọc hơn tài liệu tiêu chuẩn chính thức và cung cấp điều hướng tốt hơn do bản chất wiki của nó. Dự án ghi lại tất cả các phiên bản của tiêu chuẩn C ++ và trang web cho phép lọc hiển thị cho một phiên bản cụ thể. Dự án được trình bày bởi Nate Kohl tại CppCon'14 .


Kinh điển / Cũ hơn

Lưu ý: Một số thông tin trong các sách này có thể không được cập nhật hoặc không còn được coi là thông lệ tốt nhất.

  • Thiết kế và tiến hóa của C ++ (Bjarne Stroustrup) Nếu bạn muốn biết tại sao ngôn ngữ lại như vậy, cuốn sách này là nơi bạn tìm thấy câu trả lời. Điều này bao gồm mọi thứ trước khi tiêu chuẩn hóa C ++.

  • Những suy ngẫm về C ++ - (Andrew Koenig và Barbara Moo) [Đánh giá]

  • Các kiểu và thành ngữ lập trình C ++ nâng cao (James Coplien) Tiền thân của phong trào mẫu, nó mô tả nhiều thành ngữ C ++ cụ thể của C ++. Đây chắc chắn là một cuốn sách rất hay và vẫn có thể đáng đọc nếu bạn có thể dành thời gian, nhưng khá cũ và không cập nhật với C ++ hiện tại.

  • Thiết kế phần mềm quy mô lớn C ++ (John Lakos) Lakos giải thích các kỹ thuật để quản lý các dự án phần mềm C ++ rất lớn. Chắc chắn, một đọc tốt, nếu nó chỉ được cập nhật. Nó được viết rất lâu trước C ++ 98 và bỏ lỡ nhiều tính năng (ví dụ như không gian tên) quan trọng đối với các dự án quy mô lớn. Nếu bạn cần làm việc trong một dự án phần mềm C ++ lớn, bạn có thể muốn đọc nó, mặc dù bạn cần dùng nhiều hơn một hạt muối với nó. Tập đầu tiên của phiên bản mới được phát hành vào năm 2019 .

  • Bên trong Mô hình đối tượng C ++ (Stanley Lippman) Nếu bạn muốn biết các hàm thành viên ảo thường được triển khai như thế nào và các đối tượng cơ sở thường được đặt trong bộ nhớ trong kịch bản đa kế thừa và tất cả những điều này ảnh hưởng đến hiệu suất như thế nào, đây là nơi bạn sẽ tìm các cuộc thảo luận kỹ lưỡng về các chủ đề đó

  • Sách hướng dẫn tham khảo C ++ được chú thích (Bjarne Stroustrup, Margaret A. Ellis) Cuốn sách này khá lỗi thời trong thực tế là nó khám phá phiên bản C ++ 2.0 năm 1989 - Mẫu, ngoại lệ, không gian tên và phôi mới chưa được giới thiệu. Tuy nhiên, nói rằng cuốn sách này trải qua toàn bộ tiêu chuẩn C ++ của thời gian giải thích cơ sở lý luận, các triển khai có thể và các tính năng của ngôn ngữ. Đây không phải là một cuốn sách để tìm hiểu các nguyên tắc và mẫu lập trình trên C ++, nhưng để hiểu mọi khía cạnh của ngôn ngữ C ++.

  • Suy nghĩ trong C ++ (Bruce Eckel, tái bản lần 2, 2000). Hai tập; là một phong cách hướng dẫn miễn phí bộ sách giới thiệu cấp độ. Tải xuống: vol 1 , vol 2 . Thật không may, họ đã bị tấn công bởi một số lỗi nhỏ (ví dụ: duy trì thời gian đó là tự độngconst), không có danh sách errata chính thức. Mộtdanh sách errata bên thứ 3có sẵn tại ( http://www.computersciencelab.com/Eckel.htm ), nhưng dường như nó không được duy trì.

  • Khoa học và Kỹ thuật C ++: Giới thiệu về các kỹ thuật và ví dụ nâng cao (John Barton và Lee Nackman) Đây là một cuốn sách toàn diện và rất chi tiết đã cố gắng giải thích và sử dụng tất cả các tính năng có sẵn trong C ++, trong bối cảnh phương pháp số. Nó đã giới thiệu tại thời điểm một số kỹ thuật mới, chẳng hạn như Mẫu Mẫu định kỳ tò mò (CRTP, còn được gọi là thủ thuật Barton-Nackman). Nó đi tiên phong trong một số kỹ thuật như phân tích thứ nguyên và phân biệt tự động. Nó đi kèm với rất nhiều mã có thể biên dịch và hữu ích, từ trình phân tích cú pháp biểu thức đến trình bao bọc Lapack. Mã này vẫn có sẵn ở đây: http://www.informit.com/store/scientific-and-engineering-c-plus-plus-an-int sinhtion-9780201533934. Thật không may, các cuốn sách đã trở nên hơi lỗi thời trong phong cách và các tính năng của C ++, tuy nhiên, đó là một chuyến tham quan đáng kinh ngạc vào thời điểm đó (1994, trước STL). Các chương về kế thừa động lực hơi phức tạp để hiểu và không hữu ích lắm. Một phiên bản cập nhật của cuốn sách kinh điển này bao gồm ngữ nghĩa di chuyển và những bài học rút ra từ STL sẽ rất hay.


402
@G Rassovsky: Tất cả những cuốn sách hứa sẽ dạy X trong Y giờ. Ví dụ: Học C ++ trong 24 giờ. Tôi tin rằng tất cả các cuốn sách như vậy là tốt hơn nên tránh.
akhil_mittal

115
Tôi ghét đi giày của bất kỳ ai, nhưng tôi không đề xuất "Thinking in C ++" của Bruce Eckel mặc dù tôi tôn trọng tác giả vì đã xuất bản tài liệu của mình trực tuyến miễn phí. Quan điểm của cuốn sách cho thấy việc sử dụng C ++ và lập trình "hướng đối tượng" tương đối kém hoặc không hiệu quả, gần giống với ứng dụng kém của các mẫu thiết kế GoF. Tôi thấy đây là một cuốn sách giới thiệu thú vị về lập trình nói chung, nhưng khi ai đó làm quen với lập trình và (đặc biệt) về khoa học máy tính nói chung, tôi tìm thấy những cuốn sách nghĩ hoàn toàn theo thuật ngữ OOP "cổ điển" gây bất lợi cho giáo dục.

30
@ G.Rassovsky trên trang web accu.org, có phần đánh giá sách có xếp hạng. Bạn có thể tìm kiếm những cái C ++. Nhiều người trong số họ được đánh giá "không khuyến khích".
Zaphod Beeblebrox

83
C ++ được tăng tốc là từ năm 2000. Tôi có nên lo lắng rằng nó đã lỗi thời không?
Ứng dụng tự động

60
Tôi nghĩ sẽ tốt hơn nếu đặt ngày xuất bản cho phiên bản (với số phiên bản nếu có).
Aaron Hall
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.