草庐IT

BeanShell断言

全部标签

c++ - 如果使用 delete 释放使用 malloc() 获得的内存,是否应该产生警告甚至断言失败?

在C++中,使用delete来释放通过malloc()获得的内存并不一定会导致程序崩溃。如果使用delete来释放使用malloc()获得的内存,是否应该产生警告甚至断言失败?为什么Stroustrup在C++上没有这个功能? 最佳答案 InC++usingdeletetofreememoryobtainedwithmalloc()doesn'tnecessarilycauseaprogramtoblowup.不,但它必然会导致未定义的行为,这意味着任何事情都可能发生,包括程序崩溃或程序继续以看似正确的方式运行。Doyouguyst

c++ - 调试断言失败!表达式 : __acrt_first_block == header

我正在尝试测试我用GoogleTest编写的dll,当我调用其中一个测试时,它会抛出这个错误:我得出的结论是,问题在于将内存分配给vector,但我不知道如何解决这个问题,因为我对C++编程相当陌生。代码如下:#ArraysCPP11.h#ifdefARRAYSCP11_EXPORTS#defineARRAYSCP11_API__declspec(dllexport)#else#defineARRAYSCP11_API__declspec(dllimport)#endif__declspec(dllexport)voidremoveWhiteSpaces(std::vectorv,st

c++ - 做一个静态断言模板类型是另一个模板

我如何static_assert像这样?如果不是C++或C++11中的新功能,也许Boost支持它?templatestructfoo{};templatestructbar{static_assert(FooTypeisindeedfooforsomeT,"failure");//how?}; 最佳答案 你可以按照这些思路做一些事情。给定一个可以验证类是否是类模板的实例化的特征:#includetemplateclassTT>structis_instantiation_of:std::false_type{};templatec

c++ - 如何将断言放入 C/C++ 中的发布版本中

我只需要运行shipbuild并且我需要在releasebuild中的特定条件下断言以查看问题是否已解决。我该怎么做? 最佳答案 取消定义NDEBUG宏-您可以在本地围绕要保留在构建中的断言执行此操作:#undefNDEBUG#include//reincludetheheadertoupdatethedefinitionofassert()或者做任何你需要做的事情,这样你的构建过程就不会首先定义NDEBUG宏。 关于c++-如何将断言放入C/C++中的发布版本中,我们在StackOve

c++ - 当并非所有枚举值都在 C++ 中的 switch 语句中处理时的编译时断言

当不是所有可能的枚举值都在switch语句中处理时,我希望得到编译器警告或错误。当然,我可以添加一个带有断言的默认情况,并(最终)在运行时出错。但我想在编译时出错。我不确定这在C++中是否可行,但也许有人知道一个技巧......编辑:使用-Wswitch似乎是GCC的解决方案。VS2010有类似的东西吗?(我没有使用GCC)。编辑2:好的,我找到了VC++(VS2010)的解决方案:启用警告C4062会在缺少值且未提供默认情况时产生警告。启用警告C4061会在缺少值时生成警告,即使提供了默认情况也是如此。 最佳答案 您没有提到您使用

c++ - GCC 有内置的编译时断言吗?

我们现有的编译时断言实现基于负数组索引,它在GCC上提供了较差的诊断输出。C++0x的static_assert是一个非常好的特性,它提供的诊断输出要好得多。我知道GCC已经实现了一些C++0x特性。有谁知道static_assert是否在其中,如果它是从什么GCC版本开始的? 最佳答案 根据thispage,gcc从4.3开始就有static_assert。 关于c++-GCC有内置的编译时断言吗?,我们在StackOverflow上找到一个类似的问题: h

c++ - 当 A 和 B 为 "the same"时断言(sizeof(A) == sizeof(B)) 是否安全?

假设我有两个类,我希望它们具有完全相同的内存布局:structA{intx;inty;};/*possiblymorecode*/structB{inta;intb;};标准中是否有任何内容可以保证我可以安全地static_assert(sizeof(A)==sizeof(B))?作为一个较弱的变体考虑structC{inta;};static_assert(sizeof(A)>=sizeof(C));//canthiseverfail?static_assert(sizeof(A)>sizeof(C));//canthiseverfail?问题由thisone触发.天真地我不希望任何

C++ 断言 : the precedence of the expression in an assert macro

在C++中:assert(std::is_same::value);//doesnotcompileassert((std::is_same::value));//compiles谁能解释一下原因? 最佳答案 assert是一个预处理器宏。预处理器宏是愚蠢的;他们不懂模板。预处理器在括号内看到10个标记:assert(std::is_same::value);它以逗号分隔。它不知道这是错误的分割位置,因为它不明白std::is_same和int>::value不是有效的C++表达式。预处理器足够聪明,不会在多个参数之间分解内部括号对

c++ - 关于模板结构大小的静态断言

我需要确保模板结构与其成员的大小完全相同。static_assert似乎是这里的首选工具。但是,我不能在结构本身内使用static_assert,因为那里的大小还不知道。这是我想要的:templatestructfoo{T1v1;T2v2;//Doesn'tcompile,invalidapplicationofsizeoftoincompletetypestatic_assert(sizeof(foo)==sizeof(T1)+sizeof(T2),"Structsizeinvalid");};这不起作用。那么该怎么做呢?我不想让实例化模板的人在每次实例化中检查自己的负担。每当实例化

c++ - 断言总是不好的吗?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题吗?更新问题,以便editingthispost提供事实和引用来回答它.关闭8年前。Improvethisquestion我曾经在一家公司工作,其中一些首席架构师/开发人员在各种项目中强制要求不得使用断言,并且通常会从代码中删除它们并用异常替换它们。我觉得它们对于编写正确的代码非常重要。任何人都可以建议如何证明这样的授权是合理的吗?如果是这样,断言有什么问题? 最佳答案 根据JaredPar的评论,我们使用了修改后的assert版本,其作用类似于契约(Co