使用const_cast时的意外输出<>

时间:2013-04-02 11:53:08

标签: 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;
    }

我期待输出为 Hello World!

1 个答案:

答案 0 :(得分:7)

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

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

它仅适用于您的计算机,因为有时“未定义的行为”意味着“看起来像它有效”。 : - )