我写下面的代码我的机器(devcpp)和codepad.org但我的匹配工作正常,在codepad.org(http://codepad.org/XfW5a8en)输出是一个垃圾字符.
Run Code Online (Sandbox Code Playgroud)#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!
当你说string("Hello ")没有将它存储在任何地方时,字符串可以在创建它的表达式的末尾被销毁.
你正在使用指向被破坏的字符串所拥有的内存的指针,这可能会或者可能不会在之后"Hello "的某段时间内保留该值,但是不确定是否会发生这种情况,或者发生了多长时间.
它只适用于你的机器,因为有时"未定义的行为"意味着"看起来像是有效的".:-)