这个问题是关于我在const_cast
制作char *
const char *
. 我知道这个转换是隐式完成的,当隐式进行转换时,它对我不起作用。
有问题的代码是:
#include <cstdlib>
int main() {
const char * org_str = NULL;
org_str = const_cast<const char*>(getenv("ENV_VAR")); // PROBLEM !!
}
根据Linux 手册页 getenv()
获取const char *
并返回char*
. 因此,根据我对 const 正确性的理解,我可以char*
毫无问题地进行 const 强制转换。
所以,我的问题是,为什么const_cast
在这里给我一个 UB(代码正在崩溃)但正如预期的那样没有const_cast
(隐式转换)它的工作正常(所以问题必须与使用const_cast
)有关?
请注意,我知道隐式转换是去这里的方式,通过这篇文章,我需要专门针对此处观察到的行为的答案。
编辑:
由于 So'ers 同胞无法重现该错误,因此我假设这是一些奇怪的运行时/编译器问题。但是,如果标准中提到了此类问题,请告诉我。
暂时我接受迈克的回答。