c++ - 使用 const_cast<> 时出现意外输出

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

我期望输出为 世界,您好!

最佳答案

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

你正在获取一个指向被销毁的字符串所拥有的内存的指针,它可能会或可能不会在之后的一段时间内保留 "Hello " 的值,但不确定是否那会发生,或者会发生多久。

它只在您的机器上工作,因为有时“未定义的行为”意味着“看起来可以工作”。 :-)

关于c++ - 使用 const_cast<> 时出现意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15763416/

相关文章:

c++ - 努力使用链表实现 Set

c++ - 我可以合法地将指向结构成员的指针强制转换为指向该结构的指针吗?

C++ vector<vector<int>> 开头保留大小

C++完美转发: why do we need forward() if we can use const_cast()?

c++ - 在 const 方法中修改非常量对象的非可变成员是未定义行为吗?

c++ - 如何使用 openMP 使这段代码线程安全?

c++ - 如果它被定义为 C++ 类中的成员函数,我得到 "non-standard syntax; use ' &' to create a pointer to member"

C++。为什么我不能编译这段代码?使用 const_cast 删除 constness 有什么问题?

c++ - 当你用 const_cast 移除 const 时,什么时候可以修改一个值?