Ich habe immer gedacht, dass es const Einheimischen constVermeiden const Einheimische, die zurückgegeben werden?
void f() {
const resource_ptr p = get();
// ...
}
jedoch letzte Woche habe ich beobachtet Studenten zu haben gut ist, die auf einer C++ Übung gearbeitet und wunderte sich über ein const Zeiger
resource_ptr f() {
const resource_ptr p = get();
// ...
return p;
}
Hier zurückgegeben werden Wenn der Compiler NRVO nicht anwenden kann (stellen Sie sich ein Szenario vor, bei dem das wahr ist, vielleicht einen von zwei Zeigern abhängig von einer Bedingung), wird die const
plötzlich zu einer Pessimierung, weil der Compiler nicht von p
verschoben werden kann const.
Ist es eine gute Idee, const
auf zurückgekehrten Einheimischen zu vermeiden, oder gibt es einen besseren Weg, damit umzugehen?
Kann es nicht von der 'const' local sowieso über als-ob-Regel bewegen? –
In der Praxis neigen Compiler dazu, (N) RVO in irgendwelchen, aber den einfachsten Fällen ziemlich schlecht anzuwenden, so dass dies ein vernünftiges Anliegen ist. Ein spezieller Fall ist, wenn Ihre "lokale Variable" tatsächlich ein Argument ist, bei dem die Eliminierung von Daten leider verboten ist. –
Sollte ein Compiler nicht feststellen können, dass die Lebensdauer von 'p' endet und sich trotzdem bewegt? – Pixelchemist