Я написал ниже код моей машины (devcpp) и codepad.org, но по моему соглашению работает нормально, а на codepad.org (http://codepad.org/XfW5a8en) вывод является символом мусора.Неожиданный вывод при использовании const_cast <>
#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; }
Я ожидаю выход как Hello World!
'string (" Hello ")' и 'string (« World! »)' Являются временными объектами, уничтоженными после ';' в своих строках. –
Я не в курсе последних стандартов, но IMHO в прежние времена (до C++ 0X), код, используемый для раскрытия неопределенного поведения, потому что указатель, возвращаемый 'c_str()', был действителен только до тех пор, пока объект он был получен из live, а 'string (" Hello ")' создает временное, которое уже может быть разрушено на сайте вашего 'std :: cout'. – Axel