#include <iostream>
using namespace std;
int main()
{
char * a = nullptr;
{
char * b = (char *) "hello";
a = b;
}
cout << a << endl; // prints hello
return 0;
}
我有上面的代码。我很难理解为什么代码不会崩溃。我的理由是,我预计会发生崩溃,因为我将指针b与指针a一起传递到上作用域,并将其用于cout。由于";你好";是在b的作用域内创建的,并且没有使用新的关键字,我希望它能像作用域中的变量一样自动清理自己。我想错了什么??
类似"hello"
的C样式字符串文字具有静态存储持续时间;它存在于程序的生命中。那么在定义了b
的范围之后,它仍然对cout << a << endl;
有效(而a
指向它(。
字符串文字具有静态存储持续时间,因此在程序的整个生命周期中都存在于内存中。