断言被视为 Visual Studio 中的 C 风格转换

Assert is seen as C style cast in Visual Studio

Here is the error and a glimpse of the code 我的一门课程要求我使用警告级别 4 并将警告视为 Visual Studio 中的错误。除此之外,我们还需要激活 Cpp Core Guidelines。然而,由于我激活了这些选项,我一直被警告错误 C26493(不要使用 C 风格转换)所困扰。显然,他们认为我的 "assert" 测试是 C 风格的转换。我还没有看到任何其他学生有这个问题。有人可以帮我解决这个问题吗?

Assert 是一个扩展(在 visual studio 中)到:

的宏

    #define assert(expression) (void)(                                                       \
            (!!(expression)) ||                                                              \
            (_wassert(_CRT_WIDE(#expression), _CRT_WIDE(__FILE__), (unsigned)(__LINE__)), 0) \
        )

如您所见,有一个 C 风格的案例要作废。

所有学生都应该看到警告,而不仅仅是你。如果您想避免此警告,请使用使用 C++ 样式强制转换的 ASSERT 实现。

我一直在使用的任何标准 ASSERT 宏都会扩展为 C 样式转换为 void 但 gcc c++ 模式:https://github.com/lattera/glibc/blob/master/assert/assert.h

这是我使用 C++ 强制转换的自定义实现的示例。这也在调试模式下使用全局变量,以便能够在调试时禁用断言。

extern MYUTILS_DLLINTERFACE bool g_MYASSERT_enabled;
extern bool MYUTILS_DLLINTERFACE _is_MYASSERT_enabled();
#ifdef _DEBUG
# define __MYASSERT(x) (static_cast<void>(!_is_MYASSERT_enabled() || (_ASSERTE(x), 0)))
#else
# define __MYASSERT(x) (static_cast<void>(0))
#endif