Libro

Effective Modern C++: 42 แนวทางใช้ C++11 และ C++14 อย่างถูกวิธี

หนังสือของ Scott Meyers (O'Reilly, 2014) ว่าด้วยการใช้ฟีเจอร์ของ C++11 และ C++14 เช่น smart pointer, move semantics, lambda และ concurrency บทความนี้สรุปจากสารบัญในระเบียนห้องสมุด หน้าผู้เขียน และ errata

ภาพประกอบบทความ: ปกหนังสือ Effective Modern C++ โดย Scott Meyers

ขอบเขตของบทความ: แนะนำขอบเขตเนื้อหาจากสารบัญในระเบียนห้องสมุด หน้าของผู้เขียน และหน้า errata ยังไม่ได้อ่านเนื้อหาของบทใด หน้าตัวอย่างบนเว็บ O'Reilly เปิดไม่ได้ในการค้นคว้าครั้งนี้

C++11 และ C++14 เพิ่มฟีเจอร์จำนวนมาก เช่น auto, move semantics, lambda และ smart pointer คนที่เขียน C++ แบบเดิมมักรู้ว่าฟีเจอร์เหล่านี้มีอยู่ แต่ไม่แน่ใจว่าควรใช้เมื่อไรและมีกับดักอะไร หนังสือเล่มนี้ของ Scott Meyers ตั้งใจตอบคำถามนั้นในรูปแบบแนวทางเป็นข้อ ๆ แบบเดียวกับ Effective C++

หนังสือเล่มนี้ว่าด้วยอะไร

Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14 เขียนโดย Scott Meyers ตีพิมพ์โดย O'Reilly ปี 2014 เป็นฉบับแรก ระเบียนห้องสมุดระบุความยาว xv + 315 หน้า ISBN ฉบับพิมพ์ 9781491903995 (ระเบียนห้องสมุด UTB)

เว็บไซต์ผู้เขียนอธิบายว่าเป็นหนังสือว่าด้วยการใช้ฟีเจอร์ของ C++11 และ C++14 อย่างมีประสิทธิผล มีแนวทางใหม่ 42 ข้อ ครอบคลุม smart pointer, move semantics, lambda expression, concurrency API และการย้ายจาก C++98 (aristeia.com)

เนื้อหาครอบคลุมหัวข้ออะไร

ระเบียนห้องสมุดแสดงชื่อบทแปดบทตามลำดับ (ระเบียนห้องสมุด UTB):

  1. Deducing Types

  2. auto

  3. Moving to Modern C++

  4. Smart Pointers

  5. Rvalue References, Move Semantics, and Perfect Forwarding

  6. Lambda Expressions

  7. The Concurrency API

  8. Tweaks

ระเบียนนี้ไม่แสดงชื่อแต่ละข้อ เพื่อเห็นภาพหัวข้อย่อย หน้าหลักสูตรอบรมของผู้เขียนซึ่งสร้างจากหนังสือเล่มนี้ระบุหัวข้อ เช่น lvalue กับ rvalue, std::move กับ std::forward, braced initialization, nullptr, scoped enum, override, noexcept, constexpr, std::unique_ptr, std::shared_ptr และ make function, universal reference, กรณีที่ perfect forwarding ล้มเหลว, lambda เทียบกับ std::bind, std::async และ future รวมถึง emplacement เทียบกับ insertion (หลักสูตร Effective Modern C++) หัวข้อเหล่านี้เป็นโครงของหลักสูตร ไม่ใช่สารบัญของหนังสือ

เรื่องมาตรฐานภาษาที่ใหม่กว่า

หนังสือเขียนสำหรับ C++11 และ C++14 หน้า errata ของผู้เขียนบันทึกการแก้ไขตั้งแต่ตีพิมพ์เดือนพฤศจิกายน 2014 และผู้เขียนบอกว่าการแก้ไขส่วนใหญ่เป็นเรื่องรูปแบบ ไม่กระทบเนื้อหาทางเทคนิค (errata) แต่ในหน้าเดียวกันมีบันทึกเรื่อง C++17 อยู่บ้าง เช่น เอกสาร N3922 ที่เปลี่ยนวิธี deduce ของ auto x{ 27 }; และการที่ C++17 ปรับลำดับการประเมินอาร์กิวเมนต์ ผู้อ่านที่ใช้ C++17 ขึ้นไปจึงควรเปิด errata ประกอบ

พื้นฐานที่ควรมีก่อนอ่าน

แหล่งที่เปิดอ่านไม่ได้ระบุพื้นฐานไว้ชัด จากหัวข้ออย่าง "การย้ายจาก C++98" ในคำอธิบายของผู้เขียน และชื่อบทที่เริ่มจาก type deduction หนังสือน่าจะสมมติว่าผู้อ่านเขียน C++ แบบเดิมได้แล้วและคุ้นกับ template ข้อนี้เป็นการอนุมานของบทความ

เหมาะกับใคร และใครควรเริ่มจากเล่มอื่นก่อน

  • เหมาะ กับนักพัฒนา C++ ที่ใช้โค้ดแบบ C++98 อยู่และกำลังย้ายไปใช้ฟีเจอร์ของ C++11/14 เช่น งานระบบที่ต้องการประสิทธิภาพและต้องจัดการหน่วยความจำกับ thread อย่างระวัง

  • เหมาะ กับคนที่ใช้ smart pointer, lambda หรือ std::async อยู่แล้วแต่อยากรู้กับดักที่พบบ่อย

  • ควรเริ่มจากเล่มอื่นก่อน ถ้ายังไม่เคยเขียน C++ เลย หรือถ้าต้องการเนื้อหาเฉพาะของ C++17, C++20 ขึ้นไป เพราะหนังสือครอบคลุมถึง C++14

ข้อจำกัดของข้อมูลที่ใช้ในบทความนี้

  • ยังไม่ได้อ่านเนื้อหาของบทใด หน้าบทที่ 1 บนเว็บ O'Reilly และหน้าประกาศตัวอย่างบน isocpp.org ตอบกลับด้วยการปฏิเสธการเข้าถึง

  • ชื่อบทมาจากระเบียนห้องสมุดซึ่งไม่ระบุเลขบทและชื่อข้อ หัวข้อย่อยมาจากหลักสูตรอบรมของผู้เขียน

  • จำนวนหน้าไม่ตรงกัน ระเบียนห้องสมุดระบุ xv + 315 หน้า ส่วน Open Library ระบุ 334 หน้า

  • ข้อมูลในแคตตาล็อกของ Libro ใช้ ISBN 9781491908426 จาก Google Books ซึ่งต่างจาก ISBN ฉบับพิมพ์ ควรยืนยันรูปแบบไฟล์อีกครั้งตอนสอบถาม

แหล่งอ้างอิง

บทความนี้อ่านจบได้ในตัวเอง หนังสือด้านบนคือจุดต่อยอดสำหรับผู้ที่ต้องการศึกษาลึกขึ้น