Я написал ниже код моей машины (devcpp) и codepad.org, но с моим соответствием работает нормально и на codepad.org (http://codepad.org/XfW5a8en) вывод мусора символов.
#include <iostream> #include<cstring> using namespace std; int main () { char *str1 =const_cast<char*>(string("Hello ").c_str()); char *str2 = const_cast<char*>(string("World!").c_str()); char *ptr = str1; char *&rptr = str1; rptr = str2; std::cout << ptr << str1 << std::endl; }
Я ожидаю выход как
Привет, мир!
Когда ты сказал string("Hello ")
без сохранения этой строки строка может быть уничтожена в конце выражения, которое ее создает.
Вы берете указатель на память, которой владела эта уничтоженная строка, которая может сохранять или не сохранять значение "Hello "
в течение некоторого времени после этого, но не определено, произойдет ли это или как долго.
Это работает только на вашей машине, потому что иногда «неопределенное поведение» означает «похоже, что это работает». 🙂
Других решений пока нет …