C++ 断言在VisualStudio中被视为C样式转换

C++ 断言在VisualStudio中被视为C样式转换,c++,visual-studio,warnings,assert,cpp-core-guidelines,C++,Visual Studio,Warnings,Assert,Cpp Core Guidelines,我的一门课程要求我使用警告级别4,并在Visual Studio中将警告视为错误。除此之外,我们还需要激活Cpp核心指南。然而,自从我激活了这些选项后,我一直被警告错误C26493困扰(不要使用C样式转换)。显然,他们认为我的“断言”测试是C风格的铸件。我没有看到其他学生有这个问题。有人能帮我解决这个问题吗?Assert是一个宏,可以(在visual studio中)扩展为: #定义断言(表达式)(无效)(\ (!!(表达))||\ (_wassert(_CRT_WIDE(#表达式),_CRT

我的一门课程要求我使用警告级别4,并在Visual Studio中将警告视为错误。除此之外,我们还需要激活Cpp核心指南。然而,自从我激活了这些选项后,我一直被警告错误C26493困扰(不要使用C样式转换)。显然,他们认为我的“断言”测试是C风格的铸件。我没有看到其他学生有这个问题。有人能帮我解决这个问题吗?

Assert是一个宏,可以(在visual studio中)扩展为:


#定义断言(表达式)(无效)(\
(!!(表达))||\
(_wassert(_CRT_WIDE(#表达式),_CRT_WIDE(u文件),(无符号)(u行),0)\
)

正如你所看到的,有一个C型案例需要作废。

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

我所使用的任何标准断言宏都扩展到C样式的CAST,但GCC C++模式:

这是我使用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
extern MYUTILS\u DLLINTERFACE bool g\u MYASSERT\u已启用;
extern bool MYUTILS\u DLLINTERFACE是\u MYASSERT\u enabled();
#ifdef_调试
#定义u MYASSERT(x)(静态转换(!_是启用了MYASSERT的()| |(ASSERTE(x),0)))
#否则
#定义uuMyAssert(x)(静态_uCast(0))
#恩迪夫

欢迎来到堆栈溢出。请阅读,带上SO,阅读,以及。最后,请在问题中包含导致错误的内容,并将完整的构建输出复制粘贴(作为文本)到问题中。并在获得错误的行上添加注释。此外,您可能无法对此进行处理,因为强制转换位于
assert
宏本身内部。最后,不要使用
assert
作为运行时验证检查。对于“发布”版本,它不做任何事情,对于调试版本,如果断言失败,它会“崩溃”程序(这对用户来说是一种非常糟糕的体验)。并且没有其他工具像assert那样进行测试?