c_str() vs. data() in Standard-String-Implementierungen
Die Unterscheidung zwischen c_str()- und data()-Funktionen in STL und Es wird allgemein angenommen, dass ähnliche Implementierungen auf einer Nullterminierung basieren. Angeblich stellt c_str() immer eine nullterminierte Zeichenfolge bereit, während data() dies nicht tut.
In der Praxis wird diese Unterscheidung jedoch häufig dadurch aufgehoben, dass data() c_str() intern aufruft. Dies kann zu Verwirrung hinsichtlich des tatsächlichen Unterschieds zwischen den beiden Funktionen führen.
Korrekte Verwendung und Szenarien
In der Dokumentation wird ausdrücklich darauf hingewiesen, dass c_str() verwendet werden sollte, wenn ein Nullwert vorliegt -terminierte Zeichenfolge ist erforderlich. Wenn eine nicht auf Null terminierte Zeichenfolge akzeptabel ist, kann data() verwendet werden, da es in bestimmten Implementierungen möglicherweise eine bessere Leistung bietet.
Beyond Character-Based Strings
Es ist wichtig zu beachten, dass Zeichenfolgen in C nicht auf Zeichendaten beschränkt sind. Sie können Elemente jeglicher Art enthalten. In solchen Fällen wird data() aussagekräftiger, da es direkt auf die zugrunde liegenden Daten zugreift, während c_str() aufgrund seines Schwerpunkts auf zeichenbasierten Zeichenfolgen weniger relevant ist.
C 11 und darüber hinaus: Konvergenz
In C 11 und späteren Versionen des Standards muss data() nun nullterminiert sein, wodurch sein Verhalten an das von c_str() angeglichen wird. Dadurch wird die bisherige Unterscheidung zwischen den beiden Funktionen aufgehoben und sichergestellt, dass sie denselben Vorgang ausführen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3