设置const char*是否等于char [] literal安全?

Kei*_*h M 0 c++ string

我在一些C++代码中发现了这个:

const char *scaryPointer = "literal";
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,这不会生成编译器警告或错误(至少在Visual Studio 2008中).

这样做真的安全吗?我认为在该行完成执行后,char [] literal的地址将无效.

如果它是安全的,如果你重新分配scaryPointer给新文字会发生什么?旧文字的地址会自动释放吗?自动垃圾收集?

我发现了这个问题,但(我认为)问题/答案没有完全解决我的问题和疑虑.

Chr*_*odd 7

字符串文字具有静态存储持续时间 - 因此只要程序正在运行它们就会存在.它们通常存储在程序启动时加载的只读程序映像中.