Rückgabe vector, direkter Zugriff optimierbar?



  • Es gibt eine Funktion die nen vector zurück gibt und die kann ich nicht ändern. Kann der Compiler das optimieren, wenn man dann wie folgt zugreift?

    std::vector<std::string> getFoo() {...}
    
    int main() {
        ...
        std::cout<<getFoo()[index]; //es ist sicher dass es bei index was gibt
        ...
    

    Optimiert der Compiler das so, dass nur der string und nicht der ganze vector zurück gegeben wird?




  • Mod

    Wenn ein vector zurückgegeben wird, wird ein vector zurückgegeben. Oder vielleicht muss die Frage noch präzisiert werden. Wie sollte er auch darauf verzichten? Ohne den Rückgabevector haben wir schließlich kein Argument für den Aufruf des []-Operators. Was der Verweis auf (N)RVO hier zu suchen hat, entzieht sich meinem Verständnis. Man könnte evtl. argumentieren, dass, da alle beteiligten Typen teil der Standardbibliothek sind, sich am beobachtbaren Verhalten nichts ändert, falls der Compiler hier ein paar extreme Transformationen vornimmt - ich bezweifle aber, dass sich irgendein Compiler an so etwas heranwagt.



  • Ups, hab gar nicht mehr den letzten Satz des OP gelesen. vector per value zurückgeben hat für mich schon so extrem verdächtig nach NRVO ausgesehen 😉 Naja, immerhin kann man damit begründen, dass der vector wohl nicht zweimal erstellt wird.


Log in to reply