ข้อมูลจำเพาะการโยนไม่มีในฟังก์ชันแบบอินไลน์ที่ส่งกลับค่าตัวแปรสมาชิกเท่านั้นและไม่สามารถโยนข้อยกเว้นอาจถูกใช้โดยคอมไพเลอร์บางตัวเพื่อทำการลบล้าง (คำที่สร้างขึ้นสำหรับการตรงกันข้ามของการปรับให้เหมาะสม) ที่อาจมีผลกระทบต่อประสิทธิภาพ สิ่งนี้อธิบายไว้ในเอกสารประกอบของ Boost: ข้อยกเว้นรายละเอียดเฉพาะ
ด้วยคอมไพเลอร์บางตัวคุณสมบัติไม่ทิ้งในฟังก์ชั่นที่ไม่อินไลน์อาจเป็นประโยชน์หากการปรับให้เหมาะสมถูกต้องและการใช้ฟังก์ชั่นนั้นส่งผลต่อประสิทธิภาพในวิธีที่มันแสดงให้เห็นถึงความชอบธรรม
สำหรับฉันดูเหมือนว่าจะใช้หรือไม่เป็นการโทรที่สำคัญมากซึ่งเป็นส่วนหนึ่งของความพยายามในการเพิ่มประสิทธิภาพหรืออาจใช้เครื่องมือสร้างโปรไฟล์
อ้างจากลิงค์ด้านบนสำหรับผู้ที่รีบ (มีตัวอย่างของผลกระทบที่ไม่ตั้งใจไม่ดีจากการระบุการโยนในฟังก์ชั่นแบบอินไลน์จากคอมไพเลอร์ไร้เดียงสา):
เหตุผลข้อยกเว้นสเปค
ข้อมูลจำเพาะข้อยกเว้น [ISO 15.4] บางครั้งมีการเข้ารหัสเพื่อระบุว่ามีข้อยกเว้นใดบ้างที่จะถูกโยนทิ้งหรือเนื่องจากโปรแกรมเมอร์หวังว่าพวกเขาจะปรับปรุงประสิทธิภาพ แต่ให้พิจารณาสมาชิกต่อไปนี้จากตัวชี้สมาร์ท:
T & โอเปอเรเตอร์ * () const throw () {return * ptr; }
ฟังก์ชันนี้ไม่เรียกใช้ฟังก์ชันอื่น มันจัดการกับชนิดข้อมูลพื้นฐานเช่นพอยน์เตอร์เท่านั้นดังนั้นจึงไม่มีการเรียกใช้ลักษณะการทำงานรันไทม์ของข้อมูลจำเพาะข้อยกเว้นได้ ฟังก์ชั่นสัมผัสกับคอมไพเลอร์อย่างสมบูรณ์ จริง ๆ แล้วมันถูกประกาศแบบอินไลน์ดังนั้นคอมไพเลอร์สมาร์ทสามารถอนุมานได้ง่าย ๆ ว่าฟังก์ชั่นไม่สามารถโยนข้อยกเว้นได้ อย่างไรก็ตามคอมไพเลอร์ "ใบ้" อาจทำให้การมองโลกในแง่ร้ายทุกชนิด
ตัวอย่างเช่นคอมไพเลอร์บางตัวปิดการอินไลน์ถ้ามีข้อยกเว้นสเปค คอมไพเลอร์บางตัวเพิ่มบล็อก try / catch การลบล้างดังกล่าวอาจเป็นความเสียหายด้านประสิทธิภาพซึ่งทำให้โค้ดไม่สามารถใช้งานได้จริงในแอปพลิเคชัน
แม้ว่าในขั้นต้นจะดึงดูดความสนใจ แต่ข้อยกเว้นสเปคมีแนวโน้มที่จะมีผลกระทบที่ต้องใช้ความคิดอย่างระมัดระวังที่จะเข้าใจ ปัญหาที่ใหญ่ที่สุดของข้อยกเว้นสเปคคือโปรแกรมเมอร์ใช้มันราวกับว่าพวกเขามีผลกระทบที่โปรแกรมเมอร์ต้องการแทนที่จะเป็นผลที่พวกเขามี
ฟังก์ชั่นที่ไม่ใช่แบบอินไลน์คือที่เดียวที่ "ข้อผิดพลาด" ไม่มีข้อผิดพลาด "อาจมีประโยชน์กับคอมไพเลอร์บางตัว