将常量字符数组转换为标头中的整数是否始终安全

Is casting a const char array to an integer in the header always safe?

本文关键字:整数 是否 安全 字符 常量 数组 转换      更新时间:2023-10-16

忽略它是多么令人厌恶和黑客,以下保证是安全的吗?如果没有,为什么?

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

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

"VALUE" 属于 char const[6] 型,不能通过 static_cast 转换为intptr_t

保证不编译。不能使用 static_cast 从指针转换为整型,反之亦然。如果它是一个reinterpret_cast至少可以说它是脆弱的,因为编译器可以进行不断折叠,并且KEY可能会变得非唯一。

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