【发布时间】:2012-02-08 05:16:50
【问题描述】:
这个问题是关于我在使用const_cast 制作char * const char * 时观察到的行为。我知道此转换是隐式完成的,并且 t 在隐式完成转换时为我工作。
有问题的代码是:
#include <cstdlib>
int main() {
const char * org_str = NULL;
org_str = const_cast<const char*>(getenv("ENV_VAR")); // PROBLEM !!
}
根据Linux man page getenv() 接受const char * 并返回char*。因此,根据我对 const 正确性的理解,我可以毫无问题地对 char* 进行 const 转换。
所以,我的问题是,为什么 const_cast 在这里给了我一个 UB(代码正在崩溃),但正如预期的那样,没有 const_cast(隐式转换)它的工作正常(所以问题必须与使用 @987654333 @) ?
请注意,我知道隐式转换是要走的路,通过这篇文章,我需要专门针对此处观察到的行为的答案。
编辑:
由于其他 So'ers 无法重现该错误,因此我假设这是一些奇怪的运行时/编译器问题。但是,如果标准中提到了此类问题,请告诉我。
暂时我接受迈克的回答。
【问题讨论】:
-
你确定这完全有效吗?由于
getenv是一个函数,因此它不应该编译,因为您不能通过添加或删除const将函数指针转换为const char*。同样,这个const_cast是添加const,而不是删除它,所以它应该是安全的。我们可以看看你的实际代码吗? -
您的代码不完整。 sscce.org
-
我已经编辑了代码。谢谢指出
-
该代码没有任何问题。您的编译器或程序的其他部分一定有问题。
-
是的,即使我认为它必须在其他地方。但是自从我删除了 const_cast 后它工作得很好。
标签: c++ undefined-behavior const-correctness const-cast