Heim >Backend-Entwicklung >C++ >Ist eine Copy-on-Write-Implementierung von „std::string' in C 11 zulässig?

Ist eine Copy-on-Write-Implementierung von „std::string' in C 11 zulässig?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-15 03:28:08813Durchsuche

Is a Copy-on-Write Implementation of `std::string` Legal in C  11?

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:

  • Bei Übergabe als Argument an eine Standardbibliotheksfunktion, die einen Verweis auf einen nicht konstanten Basic_String entgegennimmt.
  • Beim Aufruf nicht konstanter Memberfunktionen, mit Ausnahme von Operator[], at, front, back, begin, rbegin, end und rend.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn