将const char数组转换为标题中的整数总是安全的吗?

时间:2012-06-29 18:54:51

标签: c++ standards standards-compliance

忽略它是多么令人厌恶和骇人听闻,以下是否保证安全?如果没有,为什么?

//.h
struct foo
{
 const static intptr_t KEY = (intptr_t) "VALUE";
};

//.cpp
void useFoo()
{
 const char * value = (const char *) foo::KEY;
 printf("%s",value);
}

2 个答案:

答案 0 :(得分:3)

不仅保证代码不安全,而且代码格式不正确。

"VALUE"的类型为char const[6],无法通过intptr_t转换为static_cast

答案 1 :(得分:2)

保证不编译。您不能使用static_cast将指针转换为整数类型或反之亦然。如果它是reinterpret_cast,那么至少可以说脆弱,因为编译器可以进行常量折叠,KEY可能变得非唯一。

此外,您应该在应用程序中定义静态成员变量KEY