C ++ ยังคงมีประสิทธิภาพอยู่หรือไม่?


139

จากสิ่งที่ผมเห็นในโพสต์นี้ฉันตัดสินใจที่จะเริ่มต้นการอ่านหนังสือเล่มนี้มีผลบังคับใช้ C ++

แต่ตอนนี้มีคุณสมบัติใหม่มากมายเนื่องจาก C ++ 11 และแนวทางปฏิบัติที่ดีบางอย่างเปลี่ยนไปฉันไม่แน่ใจว่าจริง ๆ แล้วมันเป็นความคิดที่ดีหรือไม่ การถือกำเนิดของ C ++ 11 ถูกคัดค้านคำแนะนำใด ๆ ที่มีอยู่ใน Effective C ++ หรือไม่? ถ้าเป็นเช่นนั้นฉันควรหลีกเลี่ยงหัวข้อใด


4
ผู้เขียนได้แสดงความคิดเห็นในบทความscottmeyers.blogspot.co.uk/2013/01/…และอื่น ๆ บนเว็บไซต์โดยทั่วไปใช่ แต่มีมากกว่าที่จะต้องพิจารณา
jcoder

2
เพียงแค่มีลักษณะที่โต๊ะของเนื้อหานี้: pearson.ch/1471/9780321334879/... หลายรายการยังใช้งานได้บางส่วนสามารถปรับปรุงได้ด้วยการอ้างอิง r-value และสิ่งใหม่อื่น ๆ แต่โดยรวมแล้วยังควรมีประสิทธิภาพ
ซีตา

คำถามนี้เหมาะสมสำหรับ SO (1) เนื้อหาที่ถามเกี่ยวกับไม่ได้อยู่ในคำถามมันอยู่ในทรัพยากรนอกสถานที่ (และไม่ได้เชื่อมโยง) (2) การตอบข้อเสนอแนะแต่ละข้อในหนังสือเป็นคำตอบที่แยกต่างหากซึ่งในกรณีนี้คือคำถามในรายการต้องการคำตอบมากเกินไปมิฉะนั้นคำตอบเดียวควรอภิปรายทั้งเล่มในกรณีนี้คำถามนี้กว้างเกินไป ที่กล่าวว่าการถามคำถามที่เหมือนกันเกี่ยวกับข้อเสนอแนะใด ๆ จะดีมาก
Ben Voigt

2
(1) ฉันกำลังอ้างอิงถึงหนังสือที่กล่าวถึงในหนึ่งในคำถามยอดนิยมใน SO (2) ไม่เป็นไร แต่คุณสามารถถามคำถามได้เกือบทุกข้อ หรือคุณอาจจะแคบเท่าที่คุณต้องการ ฉันคิดว่าคำตอบนั้นค่อนข้างดีและแคบกว่าคำถามส่วนใหญ่ใน SO ดังนั้นฉันจึงไม่คิดว่าจำเป็นต้องมีรายการแบบละเอียด OFF TOPIC: เดาว่าใครมีคำถามที่ขึ้นต้นด้วย "ใครบ้างสามารถเอาชนะประสิทธิภาพของจำนวนเต็มของฉันเป็น std :: string code, ลิงก์ด้านล่าง"
Capuano เยอรมัน

คำตอบ:


93

นี่คือสิ่งที่ Scott Meyers พูดถึงเกี่ยวกับมันในบล็อกของเขาเอง

ซึ่งอาจทำให้คุณสงสัยว่าข้อมูลและคำแนะนำใน Effective C ++ รุ่น pre-C ++ 0x นี้ยังเกี่ยวข้องหรือไม่ ฉันยินดีที่จะรายงานว่าทำเช่นนั้น น่าแปลกที่ในความเป็นจริง หลังจากใช้เวลาเกือบสองปีในรายละเอียดของ C ++ 0x ฉันคาดว่าจะคร่ำครวญเล็กน้อยเมื่อฉันตรวจสอบสารบัญของหนังสือเล่มนี้ด้วย C ++ 0x ในใจ แน่นอนว่าบางรายการจะไม่เหมาะสม แต่คำแนะนำที่ฉันพบนั้นได้รับการพิสูจน์แล้วว่าเป็นเสียง นักพัฒนา C ++ 0x ควรเลือก const, enums และ inlines #defines(รายการ 2) พวกเขาควรจะ. พวกเขาควรป้องกันข้อยกเว้นจากการทำลายเครื่องทำลายล้าง (รายการที่ 8) หรือไม่? อย่างแน่นอน พวกเขาควรใช้วัตถุเพื่อจัดการทรัพยากรหรือไม่ ประกาศข้อมูลส่วนตัวหรือไม่ พิจารณาทางเลือกแทนฟังก์ชั่นเสมือนจริงหรือไม่? มีปัจจัยใดบ้างที่ทำให้โค้ดเป็นอิสระจากพารามิเตอร์ของเทมเพลต (รายการที่ 13, 22, 35 และ 44) ใช่ใช่ใช่ใช่! เป้าหมายของฉันได้รับเสมอสำหรับสารบัญของ C ++ ที่มีประสิทธิภาพเพื่อสรุปคำแนะนำในหนังสือและบทสรุปนั้นยังคงมีผลบังคับใช้กับการพัฒนา C ++ 0x เช่นเดียวกับการพัฒนา“ ดั้งเดิม” C ++ C ++ 0x เป็นภาษาที่ใหญ่กว่าและในบางวิธีก็เป็นภาษาที่แตกต่างกัน แต่เทคนิคหลักสำหรับการใช้ C ++ เก่าอย่างมีประสิทธิภาพเป็นหลักสำหรับการใช้ C ++ 0x อย่างมีประสิทธิภาพเช่นกัน

นี่ไม่ได้หมายความว่า C ++ ที่มีประสิทธิภาพนี้เหมาะกับ C ++ 0x มาก หนังสือเล่มนี้ไม่ได้กล่าวถึงคุณสมบัติใหม่สำหรับ C ++ 0x ดังนั้นรายการเกี่ยวกับการใช้คุณสมบัติเหล่านั้นอย่างมีประสิทธิภาพจะหายไป C ++ 0xified Effective C ++ จะมีรายการที่ใช้ในการย้ายการดำเนินงานการเริ่มต้นสม่ำเสมอและการแสดงออกแลมบ์ดา หนังสือเล่มนี้จะมีตัวอย่างที่แตกต่างกันเช่นคนที่ใช้ตัวแปรอัตโนมัติช่วงสำหรับลูปค่าเริ่มต้นในคลาสเริ่มต้น เท่าที่หนังสือเล่มนี้ขาดการสนับสนุนสำหรับ C ++ 0x ข้อผิดพลาดคือการละเว้นไม่ใช่ค่าคอมมิชชั่น

อัปเดต : ชื่อใหม่Effective C ++ได้รับการเปิดขายตั้งแต่เดือนพฤศจิกายน 2014 จากO'ReillyและAmazon (และอีกมากมายที่คุณสามารถใช้ google ได้)


45

ใช่แน่นอนยังคงคุ้มค่าการอ่าน มีหนังสือเล่มใหม่ที่ Scott กำลังทำงานอยู่: Effective C ++ 11ซึ่งเน้นที่รหัส C ++ 11 เท่านั้น มีผลบังคับใช้ C ++ยังคงมีความเกี่ยวข้องมากและไม่ได้แทนที่โดยหนังสือเล่มใหม่ ซื้อเลยอ่านสนุกได้เลย :)


1
ฉันเห็นหนังสือที่สร้างขึ้นด้วยกันดังนั้น C ++ ที่มีประสิทธิภาพจึงเป็นรากฐานที่สำคัญ หากคุณอ่านเพียงหนึ่งในสองรายการนั้นควรเป็น C ++ ที่มีประสิทธิภาพ C ++ ที่มีประสิทธิภาพทันสมัยนั้นมีความลึกลับมากกว่า (และจริงๆแล้ว C ++ ส่วนใหญ่นั้นอยู่ห่างจาก 'modern' อยู่ดี)
Andy Krouwel

21

หนึ่งหนังสือยังคงใช้ได้แน่นอนสำหรับ C ++ 03

ประการที่สองเมเยอร์สกำลังเขียนหรือเขียนขึ้นอยู่กับว่าคุณกำลังอ่านประโยคนี้มีผลบังคับใช้ C ++ 11 หรือไม่

สามการพูดโดยทั่วไปคะแนนของหนังสือเล่มนี้จะยังคงใช้ได้ C ++ ยังคงให้ความรวดเร็วในเรื่องความปลอดภัยและปัญหามากมายในC ++ ที่มีประสิทธิภาพหมุนรอบนี้

เพียงชนิดของจุดที่ผมจะคาดหวังว่าจะไม่ถูกต้องเป็นคนที่พูดว่า "อย่าทำอย่างนี้ทำเช่นนี้แทน." "ไม่ทำเช่นนี้" จะยังคงใช้ได้ แต่ C ++ จะแก้ไขปัญหาบางอย่างได้ โดยเฉพาะอย่างยิ่งคำแนะนำการใช้งานบูสท์นั้นอาจถูกคัดค้านเนื่องจาก C ++ 11 ได้รวมเอาฟีเจอร์มากมายที่เมเยอร์สอ้างถึงโปรแกรมอ่านเพื่อเพิ่มสำหรับ


1
และแน่นอนtr1เนื่องจากฉันเชื่อว่าองค์ประกอบทุกอย่างของtr1เขาพูดถึงทำให้เป็นมาตรฐาน C ++ 11
Kyle Strand
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.