#include <iostream>
struct Box
{
Box() { std::cout << "constructor called" << std::endl; }
Box(const Box&) { std::cout << "Copy constructor called" << std::endl; }
Box(Box&&) { std::cout << "Move constructor called" << std::endl; }
void run() const { std::cout << "Run" << std::endl;}
};
int main()
{
Box a(Box());
a.run();
}
(demo) olarakYok ya <code>Copy Constuctor</code> veya <code>Move Constructor</code> argüman olarak anonim nesne <code>Box()</code> geçtiğin çağrılacak bekliyordum Yukarıdaki kodda argüman
Anonim Nesne geçirmeden üzerine denir. Ama hiçbiri çağrılmadı. Sebep muhtemelen copy elision
olabilir. Ancak anonim nesne A()
için bile kurucu çağrılmaz. Aslında, yukarıdaki kod derleme yapmıyor ve run()
işlev derleyicisini çağırıyor. Biz Box a(Box())
yazdığınızda
a.cpp: In function ‘int main()’:
a.cpp:28:7: error: request for member ‘run’ in ‘a’, which is of non-class type ‘Box(Box (*)())’
a.run();
Yani ne oluyor? Neler yaratılıyor?
MVP tarafından ısırıldınız. Kutu a (Kutu()), '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' adlı bir fonksiyonun beyanı olduğunu düşünüyor – Borgleader
@YSC Biçimlendirmeye katılıyorum mu, emin değilim - önceki sürümü tercih ettim. – pingul
@pingul kısa kodları SO üzerinde daha fazla ilgi çekmeye eğilimlidir ve benim düzenlemem OP'nin asıl amacını değiştirmez (umarım). Ama kesinlikle onu geri çağırmak için çağrı. – YSC