テキストサイズが等しい場合にポインタが同じになることが理解できませんでした。 firstStringObj :: c_str()は前のポインタを上書きしているようです。std :: string :: c_str()は、関数によって返された前のものを上書きします。
#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(こんにちは+)(0x4593eb8) firstStringObj(+こんにちは)(0x4593eb8)
は、コンパイラの最適化問題のように見えます。 gccで起こらない4.9.2 – ilo
あなたは未定義の動作を観察しているので、最適化を責めることはできません。また、 '.c_str()'のドキュメントを読んでください – milleniumbug
長い文字列では起こりません。 – ilo