将常量字符数组转换为标头中的整数是否始终安全
Is casting a const char array to an integer in the header always safe?
忽略它是多么令人厌恶和黑客,以下保证是安全的吗?如果没有,为什么?
//.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
。
相关文章:
- 验证用户输入和整数是否C++
- 找出堆栈数组中的下一个整数是否相同
- 检查整数是否增加了C++
- 检查用户输入的整数是否包含所有 1 或 0?
- 如何检查整数是否包含数字 0 和 1
- 测试整数是否在范围内时,逻辑错误和不正确输出
- 如何检查整数是否发生过或在读取C 的输入文件时发生了字符
- 使用非 32 位整数是否合理
- 将整数除法到整数是否需要强制转换以浮点数或双精度以更精确
- 检查整数是否是 8 的倍数
- 一种程序,用户在其中输入一个整数,程序指示该整数是否为素数
- 将常量字符数组转换为标头中的整数是否始终安全
- 检查整数是否具有整数立方根
- 如何确定整数是否适合变量
- 检查无符号整数是否没有索引的最佳实践
- C++查找整数是否存在于矩阵的一列中
- 确定一个整数是否与另一个几乎相等
- 检查正整数是否为2的幂的最短方法
- 用于检查整数是否包含给定十六进制模式的c++代码
- 如何在不使用平方根的情况下检查一个整数是否是完全平方数