2012-08-30 16 views
15

Tôi sẵn sàng tìm hiểu thêm từ sự tương tranh và tôi đã tìm thấy cuốn sách này có nhiều đánh giá tốt. Nhưng sau khi nhìn vào lời nói đầu, tôi sợ rằng nó rất tập trung vào các chức năng STD chỉ có trong C++ 11."Đồng hành C++ trong Anthony" của Anthony William có phải là một cuốn sách phù hợp nếu không sử dụng C++ 11 không?

Vì C++ 11 chưa được sử dụng, và không phải ở nơi làm việc của tôi, tôi cần biết nếu đọc cuốn sách này sẽ lãng phí thời gian khi tôi nên đọc một cuốn sách khác.

Tôi đang tập trung vào phát triển Windows, nhưng tôi thích sử dụng các thư viện chuẩn để được sử dụng trong UNIX và Windows cả hai. Bất kỳ đề xuất hay tuyên bố nào về cuốn sách này?

+18

Đó là một cuốn sách phù hợp, hiển nhiên. Và không: đọc về C++ 11 không lãng phí thời gian. Nếu văn phòng của bạn không thông qua C++ 11 trong vòng một năm, ở đó sẽ là một sự lãng phí thời gian của bạn (theo ý kiến ​​khiêm tốn của tôi) – sehe

+3

@ bạn có thể là đúng. Thật không may cho tôi, tôi đang ở Tây Ban Nha. Không có nhiều nơi khác để đi nhưng ở nước ngoài. –

+3

@sehe: điều đó phụ thuộc vào rất nhiều thứ.Nếu bạn muốn tái cấu trúc cơ sở mã của mình với nhiều tính năng ngôn ngữ mới thú vị, tất nhiên bạn nên có lịch biểu để chuyển sang C++ 11 (mặc dù tôi nghi ngờ nó sẽ được triển khai trong vòng một năm, vì vậy nó cũng phụ thuộc vào cảm nhận của bạn về lập trình cho một mục tiêu di động). Một số sản phẩm yêu cầu một chuỗi công cụ ổn định, mặc dù, đến mức không dùng các bản cập nhật không sửa lỗi, trừ khi cần thiết. –

Trả lời

13

Không, sử dụng nhiều sách C++ 11 cú pháp.

Ngoài ra mọi thứ được thảo luận trong sách chỉ là các tính năng thư viện C++ 11, ví dụ mô hình bộ nhớ C++ 11 là một điều hoàn toàn mới trong C++ 11 (C++ 98 không nhận ra sự tồn tại của MT).

Vẫn IMHO bạn sẽ nhận được siêu dễ cài đặt g ++ 4.9 + từ: nuwen.net hoặc chỉ nhận Cộng đồng VS 2013.

Vì C++ 11 là tiêu chuẩn và tôi đoán bạn sẽ sớm bắt đầu sử dụng tại nơi làm việc của bạn (nếu không trích dẫn Andrei Alexandrescu: "Gọi đầu của bạn!"). Btw std::threadboost::thread khá giống nhau nhưng có sự khác biệt đáng chú ý.

+1

Không tính VC++ 2012 Express, vì nó sẽ chỉ cài đặt trên Windows 8. – SChepurin

+1

@SChepurin: Điều đó chỉ áp dụng cho VS Express cho Windows 8; VS Express cho Windows Desktop sẽ có sẵn vào cuối năm nay và không có yêu cầu đó (cài đặt trên Vista + AFAIK). – ildjarn

+0

@ildjarn - Cảm ơn bạn đã sửa. Nó thực sự là một tin tốt và có vẻ là đúng theo chủ đề này -http: //visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2645679-visual-studio-11-express-on-windows- 7-và-the-abil? Page = 4 – SChepurin

6

Bạn nói đúng, nó tập trung rất nhiều vào C++ 11. Đó là "đa luồng thực tế", như phụ đề gợi ý.

Cách duy nhất bạn có thể quan tâm nếu bạn không sử dụng C++ 11 là nếu bạn dự định sử dụng các chuỗi tăng, là cơ sở của chuỗi C++ 11. Nhưng bạn phải biết rằng chúng không giống hệt nhau, như C++ 11 đã thực hiện một số thay đổi. (ví dụ trong C++ 11 bạn phải quyết định thời gian chờ đợi cho thread của bạn kết thúc hoặc để nó chạy một cách riêng của nó. Trong khi nó tự chạy theo mặc định của nó. Nếu bạn không chọn trong C++ 11, chương trình của bạn sẽ chấm dứt).

Sau đó, đối với kiến ​​thức chung của bạn như một người phát triển C++ quan tâm đến lĩnh vực của mình, đó là một khuyến cáo được đọc. C++ 11 cuốn sách không phải là quân đoàn cho bây giờ.

4

Thế hệ tiếp theo của Visual C++, sắp hết hạn trong hai tuần, bao gồm các thư viện std::thread và G ++ đã làm nếu tôi không nhầm. Tôi sẽ không tính điều này chống lại nó. Và đây là điều: C++ 11 thực sự khá cần thiết. Nếu nơi làm việc của bạn không có kế hoạch di chuyển, tôi sẽ tìm một nơi làm việc khác.

+0

g ++ 4.6 có chủ đề mutexes và atomics. IDK về các vesions cũ, nhưng dù cách nào cũng khá cũ ... :) – NoSenseEtAl

+0

"C++ 11 thực sự khá cần thiết" - điều này sẽ đúng nếu không có sản phẩm (hoặc hãy hào phóng với tầm quan trọng của C++ 11 chủ đề và nói, không có sản phẩm đa luồng nhắm mục tiêu một số nền tảng) đã được vận chuyển thành công bằng các phiên bản trước của C++ ;-p –

+1

Có sự khác biệt giữa "lập kế hoạch di chuyển" và thực sự thực hiện nó. Từ kinh nghiệm, bạn không thể di chuyển hiệu quả trong ít nhất năm năm sau khi tiêu chuẩn đã được thông qua. Đối với vấn đề đó, ngay cả ngày hôm nay, bạn không thể sử dụng đầy đủ các tính năng C++ 98, và bạn phải giữ các đặc tính trước C++ 98 nếu bạn lo lắng về tính di động. (VC++ 2010, chẳng hạn, không hỗ trợ các mẫu C++ 98. Nếu Windows là nền tảng có thể, bạn chưa thể chuyển hoàn toàn sang C++ 98.) –

2

Tôi nghĩ rằng đó là một cuốn sách rất thú vị ngay cả khi bạn không biết những thứ đa luồng. Giống như tạo hai mutex trong một cấu trúc, các vấn đề khi bạn chuyển từ hai lõi sang hai bộ xử lý. Ngoài ra còn có rất nhiều mẫu thiết kế. Từ cuốn sách này, bạn sẽ tìm hiểu ví dụ vấn đề ABA là gì và vv. Ngoài ra tăng thread (mà không cần C++ 11x) là rất simular để c + + 11 chủ đề. Bạn sẽ gắn bó với smart_ptrs, có thể chìm mẫu, RAII và vv. Một cuốn sách tuyệt vời của nó.

Lưu ý rằng ngay cả bây giờ không phải tất cả các tính năng đều được triển khai trong ví dụ G ++. http://gcc.gnu.org/projects/cxx0x.html

Hãy trung thực bạn chắc chắn bắt đầu học C++ mới, vấn đề thời gian khi bạn sẽ phải chạm vào nó.

0

Tôi chưa đọc sách, nhưng nếu bạn không rõ ràng về đồng thời, thì điều đầu tiên cần làm là đọc, sử dụng và hiểu một hệ thống đa luồng.

Sau đó thực hiện tương tự cho một hệ thống khác và lưu ý cẩn thận về sự khác biệt so với hệ thống bạn đã biết. Khi bạn phát hiện ra sự khác biệt, hãy bắt đầu đọc xung quanh để xem có bao nhiêu hệ thống khác nhau xử lý khía cạnh đồng thời đó.

Nếu bạn hiện đang làm việc trên một chương trình đa luồng, hệ thống đầu tiên bạn nghiên cứu phải là hệ thống bạn đang làm việc chủ yếu, bởi vì cho đến khi bạn hiểu mô hình đồng thời của hệ thống,/hoặc lập trình bằng cách sao chép và dán mã hiện có. Vì vậy, đó có thể là Windows, pthreads, Boost, TBB, hoặc cái gì khác mà đã tồn tại. Tuy nhiên, C++ 11 có thể là một ứng cử viên mạnh mẽ cho hệ thống thứ hai.

Nếu không, tôi không nghĩ rằng nó tạo ra quá nhiều sự khác biệt mà bạn học trước tiên. OK C++ 11 có những bất lợi nhỏ mà nó không tồn tại ngoại trừ một PDF - bạn sẽ phải cài đặt một số phiên bản trình biên dịch vẫn đang phát triển nhanh, và có thể sử dụng các luồng Boost thay vì std::thread trong thời gian này, và có thể một số ví dụ mã trong cuốn sách sẽ không biên dịch và bạn sẽ phải giải quyết các tính năng còn thiếu. Vì vậy, không thử các thí nghiệm từ cuốn sách ở nơi làm việc của bạn trên mã sản xuất (ý tôi là, bạn sẽ không sao, đúng không?).

Thành thật mà nói, đừng bận tâm đến C++, việc học mô hình đồng thời Java vẫn có thể là một khởi đầu hợp lý trên con đường hướng tới sự hiểu biết đồng thời. Hoặc Go: có một số tóm tắt rất hay, sẽ mất tất cả nửa ngày để có được ý chính của nó, và nó sẽ chỉ cho bạn cách bạn nên muốn chương trình đồng thời hoạt động, giả sử không có biến chứng xấu nào buộc bạn phải làm khác . Chắc chắn, bạn sẽ không sử dụng tất cả kiến ​​thức đó từ Java, Go hoặc C++ 11 ngay lập tức trong công việc C++ chuyên nghiệp của bạn, nhưng nó vẫn có giá trị.

4

Kể từ

  • bạn đang tìm kiếm một cuốn sách để đọc trên đồng thời
  • bạn muốn sử dụng một thư viện mà sẽ làm việc trên cả hai cửa sổ và unix
  • bạn muốn sử dụng C++ nhưng không phải C + +11

có thể bạn sẽ cần sử dụng Boost.Thread.

Có một số lý do tại sao bạn sẽ đọc cuốn sách này sau đó:

  • Tôi không biết của một cuốn sách về chủ đề Boost
  • Tác giả của cuốn sách này đã được các nhà phát triển tiểu học và duy trì Boost .Thread cho các năm
  • C++ 11 chủ đề rất giống với chủ đề Boost (tác giả viết: "Hầu hết các ví dụ từ sách có thể được sửa đổi để làm việc với Thư viện chủ đề Boost bằng cách đánh giá thay thế std :: với boost :: và sử dụng #include chỉ thị thích hợp. ")
Các vấn đề liên quan