ฉันจะพยายามตอบคำถามของคุณแม้ว่ามันจะเป็นคำถามเก่าและมันก็ดูไม่สำคัญเท่าไหร่ (จริงๆแล้วมันก็ไม่ได้สำคัญมากในตัวเอง ) และก็ได้รับคำตอบที่ค่อนข้างดีอยู่แล้ว เหตุผลที่ฉันต้องการจะตอบก็คือมันเกี่ยวข้องกับปัญหาพื้นฐานของวิวัฒนาการมาตรฐานและการออกแบบภาษาเมื่อภาษานั้นขึ้นอยู่กับภาษาที่มีอยู่: เมื่อใดที่ควรเลิกใช้งานคุณลักษณะของภาษาลบหรือเปลี่ยนแปลงในรูปแบบที่เข้ากันไม่ได้
ใน C ++ เป็นไปได้ที่จะใช้คีย์เวิร์ดแบบคงที่ภายในหน่วยการแปลเพื่อส่งผลต่อการแสดงสัญลักษณ์ (ตัวแปรหรือการประกาศฟังก์ชัน)
การเชื่อมโยงจริง
ใน n3092 สิ่งนี้เลิกใช้แล้ว:
การเลิกใช้งานบ่งชี้:
- ความตั้งใจที่จะลบคุณลักษณะบางอย่างในอนาคต นี่ไม่ได้หมายความว่าคุณลักษณะที่เลิกใช้แล้วจะถูกลบออกในการแก้ไขมาตรฐานครั้งต่อไปหรือจะต้องถูกลบออก "ในไม่ช้า" หรือเลย และคุณลักษณะที่ไม่เลิกใช้งานอาจถูกลบออกในการแก้ไขมาตรฐานครั้งถัดไป
- ความพยายามอย่างเป็นทางการเพื่อกีดกันการใช้งาน
จุดหลังมีความสำคัญ แม้ว่าจะไม่มีคำมั่นสัญญาอย่างเป็นทางการว่าโปรแกรมของคุณจะไม่เสีย แต่บางครั้งก็เงียบตามมาตรฐานถัดไปคณะกรรมการควรพยายามหลีกเลี่ยงการทำลายโค้ดที่ "สมเหตุสมผล" การเลิกใช้งานควรจะบอกโปรแกรมเมอร์ว่ามันเป็นสิ่งที่ไม่มีเหตุผลที่จะขึ้นอยู่กับคุณลักษณะบางอย่าง
แม้ว่าจะขีดเส้นใต้ว่าสำหรับความเข้ากันได้กับ C (และความสามารถในการคอมไพล์โปรแกรม C เป็น C ++) การเลิกใช้งานนั้นน่ารำคาญ อย่างไรก็ตามการรวบรวมโปรแกรม C โดยตรงเนื่องจาก C ++ อาจเป็นประสบการณ์ที่น่าหงุดหงิดอยู่แล้วดังนั้นฉันจึงไม่แน่ใจว่าควรพิจารณาหรือไม่
เป็นสิ่งสำคัญมากในการเก็บรักษาชุดย่อยทั่วไปของ C / C ++ โดยเฉพาะอย่างยิ่งสำหรับไฟล์ส่วนหัว แน่นอนว่าstatic
การประกาศทั่วโลกเป็นการประกาศสัญลักษณ์ที่มีการเชื่อมโยงภายในและสิ่งนี้ไม่มีประโยชน์มากนักในไฟล์ส่วนหัว
แต่ปัญหาไม่ได้เป็นเพียงความเข้ากันได้กับ C เท่านั้น แต่ยังเข้ากันได้กับ C ++ ที่มีอยู่: มีโปรแกรม C ++ ที่ถูกต้องมากมายที่ใช้static
การประกาศส่วนกลาง รหัสนี้ไม่ได้เป็นเพียงทางกฎหมายอย่างเป็นทางการก็คือเสียงดังที่จะใช้ภาษาคุณลักษณะที่ดีที่กำหนดวิธีการที่มันมีจุดมุ่งหมายที่จะใช้
เพียงเพราะตอนนี้มี "วิธีที่ดีกว่า" (ตามบางส่วน) ในการทำบางสิ่งบางอย่างไม่ได้ทำให้โปรแกรมที่เขียนแบบเก่า "ไม่ดี" หรือ "ไม่มีเหตุผล" ความสามารถในการใช้static
คีย์เวิร์ดในการประกาศอ็อบเจ็กต์และฟังก์ชันในขอบเขตส่วนกลางเป็นที่เข้าใจกันดีทั้งในชุมชน C และ C ++ และส่วนใหญ่มักใช้อย่างถูกต้อง
ในทำนองเดียวกันฉันจะไม่เปลี่ยนรูปแบบ C double
เป็นstatic_cast<double>
เพียงเพราะ "การร่ายแบบ C ไม่ดี" เนื่องจากstatic_cast<double>
จะเพิ่มข้อมูลเป็นศูนย์และไม่มีความปลอดภัย
ความคิดที่ว่าเมื่อใดก็ตามที่มีการคิดค้นวิธีใหม่ ๆ ในการทำบางสิ่งโปรแกรมเมอร์ทุกคนจะรีบเขียนโค้ดการทำงานที่กำหนดไว้อย่างดีที่มีอยู่ใหม่เป็นเรื่องที่บ้าคลั่ง หากคุณต้องการลบความอัปลักษณ์และปัญหาของ C ที่สืบทอดมาทั้งหมดคุณไม่ต้องเปลี่ยน C ++ คุณต้องคิดค้นภาษาโปรแกรมใหม่ การลบการใช้งานเพียงครึ่งเดียวstatic
แทบจะทำให้ C ++ น้อยลง C ที่น่าเกลียด
การเปลี่ยนแปลงโค้ดจำเป็นต้องมีเหตุผลและ "เก่าไม่ดี" ไม่ใช่เหตุผลสำหรับการเปลี่ยนแปลงโค้ด
การเปลี่ยนแปลงภาษาที่ไม่เหมาะสมจำเป็นต้องมีเหตุผลที่ชัดเจนมาก การทำให้ภาษาง่ายขึ้นเล็กน้อยไม่เคยเป็นเหตุผลสำหรับการเปลี่ยนแปลงที่รุนแรง
เหตุผลที่ระบุว่าทำไมถึงstatic
ไม่ดีจึงอ่อนแออย่างน่าทึ่งและยังไม่ชัดเจนว่าทำไมจึงไม่เลิกใช้ทั้งวัตถุและการประกาศฟังก์ชันด้วยกันการให้การรักษาที่แตกต่างกันแทบจะไม่ทำให้ C ++ ง่ายขึ้นหรือตั้งฉากกันมากขึ้น
ดังนั้นมันจึงเป็นเรื่องที่น่าเศร้า ไม่ใช่เพราะผลในทางปฏิบัติมันไม่มีผลในทางปฏิบัติอย่างแน่นอน แต่เนื่องจากแสดงให้เห็นถึงการขาดสามัญสำนึกอย่างชัดเจนจากคณะกรรมการ ISO.