以下代码在 Visual Studio 2010 中生成警告 C4127(条件表达式为常量)(其中 alias_wchar_t 是 wchar_t 的别名):
if (sizeof(alias_wchar_t) == sizeof(wchar_t)) // warning occurs here
{
// do stuff
}
else
{
// do other stuff
}
除了抑制警告之外,解决此问题的最优雅方法是什么?
我想出的最佳解决方案是将条件填充到静态布尔值中,并将其用作条件。if-else 的上方和下方都有大量代码,所以我将整个代码用大括号括起来,以尽可能地限制变量的范围:
// <snip>
{
static bool isSameSize = (sizeof(alias_wchar_t) == sizeof(wchar_t));
if (isSameSize)
{
// do stuff
}
else
{
// do other stuff
}
}
// <snip>
不过这感觉很恶心。这似乎应该在编译时而不是运行时解决,但预处理器不知道 sizeof。有没有更干净、更优雅的方法来解决这个问题?