使用const_cast <>时出现意外输出

dea*_*mer 1 c++ const-cast

我写下面的代码我的机器(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;
    }
Run Code Online (Sandbox Code Playgroud)

我期待输出为Hello World!

Ric*_*dle 7

当你说string("Hello ")没有将它存储在任何地方时,字符串可以在创建它的表达式的末尾被销毁.

你正在使用指向被破坏的字符串所拥有的内存的指针,这可能会或者可能不会在之后"Hello "的某段时间内保留该值,但是不确定是否会发生这种情况,或者发生了多长时间.

它只适用于你的机器,因为有时"未定义的行为"意味着"看起来像是有效的".:-)