ฉันเพิ่งสังเกตเห็นว่าภาษาการเขียนโปรแกรม OO สมัยใหม่ทุกอย่างที่ฉันคุ้นเคยอย่างน้อยก็มี (ซึ่งโดยพื้นฐานแล้วก็คือ Java, C # และ D) ช่วยให้อาร์เรย์ covariant นั่นคืออาร์เรย์สตริงเป็นอาร์เรย์วัตถุ:
Object[] arr = new String[2]; // Java, C# and D allow this
อาร์เรย์ของ Covariant เป็นรูในระบบแบบสแตติก พวกเขาทำให้เกิดข้อผิดพลาดประเภทที่เป็นไปได้ที่ไม่สามารถตรวจพบได้ในเวลารวบรวมดังนั้นทุกการเขียนไปยังอาเรย์ต้องถูกตรวจสอบที่รันไทม์:
arr[0] = "hello"; // ok
arr[1] = new Object(); // ArrayStoreException
ดูเหมือนว่าจะมีประสิทธิภาพที่แย่มากถ้าฉันทำร้านค้ามากมาย
C ++ ไม่มีอาร์เรย์ที่แปรปรวนร่วมดังนั้นจึงไม่จำเป็นต้องทำการตรวจสอบรันไทม์อีกต่อไปซึ่งหมายความว่าไม่มีการลงโทษประสิทธิภาพ
มีการวิเคราะห์เพื่อลดจำนวนการตรวจสอบรันไทม์ที่จำเป็นหรือไม่? ตัวอย่างเช่นถ้าฉันพูดว่า:
arr[1] = arr[0];
ใครจะยืนยันว่าร้านค้าไม่อาจล้มเหลว ฉันแน่ใจว่ามีการเพิ่มประสิทธิภาพที่เป็นไปได้อื่น ๆ อีกมากมายที่ฉันไม่ได้คิด
คอมไพเลอร์สมัยใหม่ทำการปรับแต่งเหล่านี้จริง ๆ หรือไม่หรือว่าฉันต้องใช้ชีวิตอยู่กับความจริงที่ว่าตัวอย่างเช่น Quicksort O (n log n) การตรวจสอบรันไทม์ที่ไม่จำเป็นต้องทำเสมอหรือไม่?
ภาษา OO สมัยใหม่สามารถหลีกเลี่ยงค่าโสหุ้ยที่สร้างขึ้นได้โดยการสนับสนุนอาร์เรย์ตัวแปรร่วม