아래 코드는 내 컴퓨터 (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; }
나는 안녕하세요 세계로 출력을 기대하고 있습니다!
'string ("Hello")'와'string ("World!")는 임시 객체이며';'다음에 자체 행에서 파기됩니다. –
나는 최신 표준에 대한 최신 정보가 없지만'c_str()'에 의해 반환 된 포인터는 객체가 유효한 한 (C++ 0X 이전의) IMHO는 코드가 정의되지 않은 동작을 노출하는 데 사용되었다. 그것은 살았고,'string ("Hello")'는 std :: cout의 사이트에서 이미 파괴되었을 수있는 임시 파일을 생성합니다. – Axel