COW-Implementierung von std::string in C 11: Legalität und Einschränkungen
Copy-on-Write (COW) ist eine häufig verwendete Technik Wird verwendet, um die Leistung zu verbessern, indem die Kosten für die Erstellung eines neuen Objekts aufgeschoben werden, bis es tatsächlich geändert wird. Es wurde jedoch in Frage gestellt, ob COW ein gültiger Ansatz für die Implementierung von std::string in C 11 ist.
Beschränkung für COW-Implementierungen
Gemäß dem C 11-Standard (21.4.1 p6) ist die Ungültigmachung von Iteratoren und Referenzen nur in bestimmten Fällen zulässig Umstände:
Für eine COW-String-Implementierung wird der Aufruf von Nicht-Konstanten ausgeführt Für den Operator[] müsste eine Kopie erstellt und Verweise ungültig gemacht werden. Dies ist durch den oben genannten Absatz verboten. Daher gilt die Implementierung von std::string basierend auf COW in C 11 nicht mehr als legal.
Explizite Aussage zur Einschränkung
Der Standard gibt dies nicht ausdrücklich an COW-basierte std::string-Implementierungen sind verboten. Die Einschränkung wird jedoch durch die Kombination von Anforderungen impliziert, die Invalidierungsszenarien explizit einschränken.
Schlussfolgerung
Während COW in früheren Versionen eine praktikable Implementierung für std::string war von C führen die C 11-Spezifikationen Einschränkungen ein, die COW-basierte Implementierungen aufgrund der unzulässigen Ungültigmachung von Referenzen verbieten.
Das obige ist der detaillierte Inhalt vonIst eine Copy-on-Write-Implementierung von „std::string' in C 11 zulässig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!