我在我的机器 (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/