N
Was meinst du, die Verkettung von den Methoden? Man kann zumindest das Verständnis dafür als Grundlagen auffassen.
at(i) → gibt eine Referenz vom Typ (bei dir) string zurück, dass sollte soweit klar sein und kann als Grundlage [Objekt,Referenz,Methode] gesehen werden.
Das Objekt vom Typ string , stellt aber wieder eigene Methoden (zB. c_str() ) zur Verfügung. Somit liegt es nahe die Operationen zusammen zufassen. Das was du sicher kennst und für dich am Anfang deutlicher ist, ist das speichern des string auf ein temporäres Objekt und damit weiter zu arbeiten.
std::string temp = lines.at(0);
temp.c_str();
Im Normalfall gibt das auch kein Problem, weil der Compiler das Zwischenobjekt für dich weg optimieren kann. Wenn du aber eine Klasse mit eigenen Kopierkonstruktor hast, dann weiß der Compiler nicht, was beim Kopieren alles vor sich geht und kann nicht einfach annehmen, dass dort nichts wichtiges passiert. Ausnahme ist, der Kopierkonstruktor ist inline . inline selber ist aber so eine eigene Sache die nur schwer beeinflussbar ist. Außer du schreibst nur Einzeiler, da wird der Compiler wohl kaum um das inline rum kommen.
Auch sieht es oft schöner aus, wenn man keine temporären Hilfsobjekte im Code hat.