C++ 使用常量强制转换时出现意外输出<&燃气轮机;

C++ 使用常量强制转换时出现意外输出<&燃气轮机;,c++,const-cast,C++,Const Cast,我已经在下面编写了我的机器(devcpp)和codepad.org的代码,但是在我的匹配上工作正常,在codepad.org()上,输出是一个垃圾字符 #包括 #包括 使用名称空间std; int main(){ char*str1=const_cast(字符串(“Hello”).c_str()); char*str2=const_cast(字符串(“World!”).c_str()); char*ptr=str1; char*&rptr=str1; rptr=str2; std::cout当您

我已经在下面编写了我的机器(devcpp)和codepad.org的代码,但是在我的匹配上工作正常,在codepad.org()上,输出是一个垃圾字符

#包括
#包括
使用名称空间std;
int main(){
char*str1=const_cast(字符串(“Hello”).c_str());
char*str2=const_cast(字符串(“World!”).c_str());
char*ptr=str1;
char*&rptr=str1;
rptr=str2;
std::cout当您说
string(“Hello”)
而不将其存储在任何位置时,该字符串可能会在创建它的表达式的末尾被销毁

您正在获取一个指向该已销毁字符串所拥有的内存的指针,该指针可能会保留
“Hello”
的值,也可能不会保留一段时间,但这是否会发生,或保留多长时间,尚不确定

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

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

您正在获取一个指向该已销毁字符串所拥有的内存的指针,该指针可能会保留
“Hello”
的值,也可能不会保留一段时间,但这是否会发生,或保留多长时间,尚不确定


它只在你的机器上工作,因为有时候“未定义的行为”是指“看起来像是工作的。”:(-< P/> <代码>字符串(“hello”)<代码>和<代码>字符串(“World!”)<代码>是临时对象,在<代码>之后被破坏;在自己的行中。我不符合最新标准,但在旧时代(在C++之前)该代码用于公开未定义的行为,因为

c_str()
返回的指针只有在从其获取的对象处于活动状态时才有效,并且
string(“Hello”)
创建了一个临时对象,该临时对象可能已经在
std::cout
string(“Hello”)
string(“World!”)的站点被破坏是Typ对象,在<代码>之后被销毁;在自己的行中。我不符合最新的标准,但在旧时代(在C++之前),IMOHO用于揭露未定义的行为,因为由<代码> CyString()/Code >返回的指针仅与从Lead和< Code >字符串中获得的对象有效。“Hello”)
创建一个临时变量,该变量可能已经在您的
std::cout
站点上被销毁。学究般地说,它不能“立即”销毁。它会一直持续到创建它的完整表达式结束,但不再持续。学究般地说,它不能“立即”销毁“已销毁。它将一直持续到创建它的完整表达式结束,但不再持续。
   #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;
    }