Aşağıdakileri göz önünde bulundurun:C++ derleyicileri, const başvuru POD parametrelerinin kopyaya geçirerek geçişi optimize eder mi?
struct Point {double x; double y;};
double complexComputation(const& Point p1, const Point& p2)
{
// p1 and p2 used frequently in computations
}
Derleyiciler sık sık atıfta bulunmayı önlemek için aktarım yoluyla aktarımı en uygun hale getiriyor mu? Başka bir deyişle complexComputation
'u şu şekle dönüştürün:
double complexComputation(const& Point p1, const Point& p2)
{
double x1 = p1.x; double x2 = p2.x;
double y1 = p1.y; double y2 = p2.y;
// x1, x2, y1, y2 stored in registers and used frequently in computations
}
Nokta bir POD olduğu için, arayanın arkasında bir kopya oluşturarak yan etki olamaz, değil mi?
Durum buysa, POD nesnelerini her zaman const referansına göre geçirebilirim, ne kadar küçük olursa olsun ve en uygun geçen semantikler hakkında endişelenmenize gerek yok. Sağ?
DÜZENLEME: Özellikle GCC derleyicisiyle ilgileniyorum. Sanırım bir test kodu yazmalı ve ASM'ye bakmalıyım.
Bu soruyu araştırmayı denedim, ancak abc'nin değer geçişi, başvuru kaynağı, vb. Hakkında isabetlerle gelmeye devam ettim. –
Genellikle, bunun tersi daha iyi bir yaklaşım olabilir (http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/). Değere göre geçiş yapın ve derleyiciyi – jalf
+1'e istediği zaman referans olarak iletmesine izin verin. İyi soru –