这是错误和代码的一瞥。 我的一门课程要求我使用Warning Level 4,并在Visual Studio中把警告作为错误处理。除此之外,我们还需要激活Cpp Core Guidelines。然而,自从我激活了这些选项后,我就一直被警告错误C26493(不要使用C风格的casts)所困扰。显然,他们认为我的 "断言 "测试是C风格的casts。我没有看到任何其他学生有这个问题。谁能帮我解决这个问题?
Assert是一个宏,可以扩展(在visual studio中)到。
#define assert(expression) (void)( \
(!!(expression)) || \
(_wassert(_CRT_WIDE(#expression), _CRT_WIDE(__FILE__), (unsigned)(__LINE__)), 0) \
)
正如你所看到的,有一个C风格的情况下,以无效。
所有学生都应该看到这个警告,而不仅仅是你。如果你想避免这个警告,使用一个使用C++风格的casts的ASSERT实现。
我一直在使用的任何标准ASSERT宏都会扩展到C风格的投向void,但是是gcc c++模式。https:/github.comlatteraglibcblobmasterassertassert.h。
这是我使用C++ casts自定义实现的一个例子。这也是在调试模式下使用一个全局变量,以便在调试时能够禁用断言。
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