Qualcuno mi ha suggerito che a un ottimizzatore è consentito scambiare liberamente il parametro pass-by-const-reference e con parametro-passing-by-value in qualsiasi funzione che non modificare il parametro. È consentito dallo standard C++?È garantita una chiamata al costruttore di copie quando si passa argomento per valore
o indicazioni diverse, il codice
struct MyClass {
MyClass(MyClass const& mc) { std::cout << "xxx" << std::endl; }
};
void foo(MyClass mc) { }
MyClass mc;
foo(mc);
non garanzia standard di C++ che "xxx" viene sempre stampato? (Riferimento allo standard apprezzato)
Il compilatore può generare qualsiasi codice desiderato che si comporta come richiede il codice. Non può magicamente omettere qualcosa come stampare il tuo messaggio, a meno che non ci sia un esplicito permesso per questo (e ciò accade solo in un caso, che è la copia elisione, e che non si applica alla tua situazione). –
A meno che non sia il tipo di dati di base o la tua funzione probabilmente modificherà il valore all'interno, passerei sempre da const ref come "default". Questa è solo la mia opinione personale. –