2016-06-30 17 views
6

varsayalım aşağıdaki sınıfını var: Daha sonra bu daha sonraBu tanımlanmış mı?

struct A{ 
    void method(A& otherA) const{ 
    /* Mutate otherA */ 
    } 
}; 

Ve sahiptirler: Ben methodthis örneği değişmeyecek derleyici söylediler

A myA; 
myA.method(myA); 

ama derleyici farkında gelmez örneğinde parametre olarak geçebilir miyim?

Bunu yaparak bir şeyleri kırıyor olabilir miyim? Bu tanımlanmış davranış mı?

+0

Evet yapabilirsin. Derleyici aynı örnek olup olmadığını bilemezdi. Geçirilen parametrenin değiştirilmesini istemiyorsanız, “const” parametre türünü yapmalısınız. – songyuanyao

+0

@songyuanyao Hayır .... ama değiştirmek istiyorum – DarthRubik

+0

O zaman iyi olacak. Geçilen argüman ile değiştirebilirsiniz. – songyuanyao

cevap

10

Bu tamamen sorun değil, sorun değil. Bu örnekte yaptığınız şey, iki argüman aslında aynı nesneye başvurduğunda bazen "takma ad" olarak adlandırılır.

düz C daha basit durumu ele alalım:

void foo(int* a, const int* b) { *a += *b; } 

Bu işlev int s iki işaretçiler alır ve birinciye ikincisini ekler.

sevdiği yöntemi içinde bir çek eklemek Bu durumda o davranış gibi yapmazsanız, yapılacak en iyi şey muhtemelen olurdu

int x = 10; 
foo(&x, &x); // now x is 20 

: Ve tabii bu kod benim foo işlevi tamamen geçerli olduğunu kullanmak

+0

Başlıca endişem, programımın "tanımlanmamış davranış" a dayanabiliyor olmasıydı, bu yüzden ben sadece kontrol etmek istedim ..... teşekkürler – DarthRubik

İlgili konular