13
วันของการส่ง const std :: string & เป็นพารามิเตอร์มากกว่าหรือไม่
ผมได้ยินพูดคุยล่าสุดโดย Sutter สมุนไพรที่ชี้ให้เห็นว่าเหตุผลที่จะผ่านstd::vectorและstd::stringโดยconst &ที่หายไปส่วนใหญ่ เขาแนะนำว่าการเขียนฟังก์ชั่นเช่นตอนนี้ดีกว่า std::string do_something ( std::string inval ) { std::string return_val; // ... do stuff ... return return_val; } ฉันเข้าใจว่าค่าreturn_valจะเป็น rvalue ณ จุดที่ฟังก์ชันส่งคืนและสามารถส่งคืนได้โดยใช้การย้ายความหมายซึ่งมีราคาถูกมาก อย่างไรก็ตามinvalยังคงมีขนาดใหญ่กว่าขนาดของการอ้างอิง (ซึ่งโดยปกติจะใช้เป็นตัวชี้) เนื่องจากstd::stringมีส่วนประกอบต่าง ๆ รวมถึงตัวชี้ไปยังฮีปและสมาชิกchar[]สำหรับการออปติไมซ์สตริงสั้น ๆ ดังนั้นสำหรับฉันแล้วการอ้างอิงโดยผ่านยังคงเป็นแนวคิดที่ดี มีใครอธิบายได้บ้างว่าทำไมสมุนไพรถึงพูดแบบนี้?