【发布时间】:2014-08-29 18:17:16
【问题描述】:
以下代码在 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。有没有更简洁、更优雅的方法来解决这个问题?
【问题讨论】:
-
注意:C++17 正在考虑使用类似
if constexpr的方法来解决这个问题
标签: c++ visual-studio-2010 c4127