Jemand hat mir vorgeschlagen, dass ein Optimierer parameter-passing-by-const-reference und parameter-passing-by-value in jeder Funktion, die dies nicht tut, frei vertauschen darf Ändern Sie den Parameter. Ist das nach dem C++ - Standard erlaubt?Ist ein Aufruf des Kopierkonstruktors garantiert, wenn Argument nach Wert übergeben wird
Oder anders, im Code angegeben
struct MyClass {
MyClass(MyClass const& mc) { std::cout << "xxx" << std::endl; }
};
void foo(MyClass mc) { }
MyClass mc;
foo(mc);
ist die C++ Standard Garantie dafür, dass "xxx" wird immer gedruckt? (Referenz auf Standard geschätzt)
Der Compiler kann beliebigen Code generieren, der sich entsprechend dem Code verhält. Es kann nicht magisch etwas wie das Drucken Ihrer Nachricht auslassen, es sei denn, es gibt eine ausdrückliche Erlaubnis dafür (und das passiert nur in einem Fall, der Kopie Elision ist, und die für Ihre Situation nicht gilt). –
Es sei denn, es ist ein einfacher Datentyp oder Ihre Funktion wird wahrscheinlich den Wert im Inneren ändern, ich würde immer const ref als "default" übergeben. Das ist nur meine persönliche Meinung. –