Ich konnte nicht verstehen, wie die Zeiger identisch sein können, wenn die Textgröße gleich ist. Es scheint so, als ob firstStringObj :: c_str() den Zeiger des vorherigen überschreibt. std :: string :: c_str() überschreibt die vorherige von einer Funktion zurückgegeben
#include <iostream>
#include <string>
#include <string>
#include <stdio.h>
std::string getConstCharAndModifyItWithANewString(const char* constchar)
{
std::string stringAtStack(constchar);
stringAtStack += "::isModified";
return stringAtStack;
}
int main()
{
const char* firstConstCharPointer = getConstCharAndModifyItWithANewString("Hi!").c_str();
std::string firstStringObj = "Hi+";
printf(" firstConstCharPointer(%s)(%p)\nfirstStringObj(%s)(%p)\n\n", firstConstCharPointer,firstConstCharPointer, firstStringObj.c_str(), firstStringObj.c_str() );
}
OUTPUT: firstConstCharPointer (Hallo +) (0x4593eb8) firstStringObj (Hallo +) (0x4593eb8)
wie ein Compiler Optimierungsproblem aussieht. Passiert nicht auf gcc 4.9.2 – ilo
Sie beobachten undefiniertes Verhalten, so dass Sie Optimierungen nicht tadeln können. Außerdem: lies die Dokumentation von '.c_str()' – milleniumbug
Nicht bei den langen Strings. – ilo