草庐IT

assert_equals

全部标签

c++ - std::sort with equal elements 给出段错误

我有一个存储指针的容器。我正在尝试根据指针指向的相应对象中的数据成员以非递增顺序对这些指针进行排序。在我的例子中,许多对象可能对该数据成员具有相同的值。下面是一个简短的代码来说明这个问题。对排序函数的调用给出了段错误。奇怪的是,如果我在容器中有16个元素指向具有相同double值的对象,则排序似乎有效。但是,如果我有17个元素指向具有相同值的对象,则会出现段错误。谁能解释一下为什么会这样?#include#include#include//someclassclassA{public:doublea;A(doubleaval);};A::A(doubleaval):a(aval){}/

C++11 static assert for equality comparable type?

如何static_assert模板类型是C++11中的EqualityComparable概念? 最佳答案 您可以使用以下类型特征:#includetemplatestructis_equality_comparable:std::false_type{};templatestructis_equality_comparable()==std::declval(),(void)0)>::type>:std::true_type{};您将以这种方式进行测试:structX{};structY{};booloperator==(Xcon

c++ - 宏 `assert`会在C++20中被移除吗?

根据cppreference,assert将用作C++属性。但是,已经有大量项目严重依赖宏assert,有什么不好的影响吗? 最佳答案 没有。提案p0542r5其中介绍了C++20契约说:Notethatwhileassert(expression)wouldexpandasafunction-likemacrowiththeappropriateheader,assert:isnotafunction-likeinvocation,sodoesnotexpand. 关于c++-宏`as

c++ - Assert() - 它有什么用?

我不明白assert()的用途。我的讲师说assert的目的是发现错误。例如:doubledivide(inta,intb){assert(0!=b);returna/b;}以上断言是否合理?我认为答案是肯定的,因为如果我的程序不应该与0(数字零)一起使用,但不知何故零确实进入了b变量,然后代码出了问题。我说得对吗?你能给我一些关于justifiedassert()的例子吗?问候 最佳答案 assert用于验证如果程序正确。assert在您的示例中是否合理取决于divide的规范:如果b!=0是前提条件,那么assert通常是验证它

c++ - `constexpr`、 `static_assert` 和 `if constexpr(...)` 变量之间的模板中 `constexpr` lambda 的评估不一致

(使用g++7.0主干。)给定以下“类型到值包装”实用程序...templatestructtype_wrapper{usingtype=T;};//"Wraps"atypeintoa`constexpr`value.templateconstexprtype_wrappertype_c{};...我创建了以下函数来检查表达式的有效性:templateconstexprautois_valid(TF){return[](auto...ts)constexpr{returnstd::is_callable{};};}is_valid函数可以如下使用://Evaluatesto`true`

c++ - 与 static_assert 和 boost::hana 相关的 Clang 编译错误

考虑以下使用-std=c++14在Clang3.8上成功编译的问题。#includenamespacehana=boost::hana;intmain(){constexprautoindices=hana::range();hana::for_each(indices,[&](autoi){hana::for_each(indices,[&](autoj){constexprbooltest=(i==(j==i?j:i));static_assert(test,"error");});});}这个测试非常荒谬,但这不是重点。现在考虑一个替代版本,其中测试直接放在static_asse

c++ - 如何使用谷歌测试抑制由 assert() 引起的运行时错误?

我在C++项目中使用谷歌测试。一些函数使用assert()来检查无效的输入参数。我已经阅读了死亡测试(WhatareGoogleTest,DeathTests)并开始在我的测试用例中使用它们。但是,我想知道是否有一种方法可以抑制断言失败导致的运行时错误。此时,每个失败的断言都会创建一个弹出窗口,我必须在每次运行测试时关闭它。随着我的项目的增长,这种行为越来越多地以一种NotAcceptable方式扰乱工作流程,我倾向于不再测试assert()-assertions。我知道通常可以禁用断言,但从测试框架内部抑制操作系统生成的警告似乎更方便。 最佳答案

c++ - 在可能的情况下扩展为 static_assert 的断言宏?

我有一些通用代码需要对成员函数的结果运行断言。此成员函数可能是constexpr,也可能不是。templatevoidfoo(Tt){assert(t.member_function()==10);}因为t.member_function()可能是一个常量表达式,我想知道是否可以将其视为static_assert这种情况,但在其他情况下默认为正常的assert。这可能吗? 最佳答案 这是一个有点疯狂的解决方案。取消注释Constc;foo(c);行,你会发现它无法编译。这是编译时断言。需要variablelengtharrays,也

C++ 递归 mpl::equal 问题?

我需要一个支持类型递归的类似于mpl::equal的过程。namespacempl=boost::mpl;BOOST_MPL_ASSERT((mpl::equal,typenamempl::push_back,char>::type>));//OK上面的编译很好,但是如果我在mpl::transform或mpl::fold中使用它,visualstudio2010rc1会提示。typedefmpl::vector,mpl::vector>type_1;typedefmpl::transform,mpl::vector>,mpl::push_back>::typetype_2;BOOST

c++ - OpenCV错误: Assertion failed.怎么办?

这个问题在这里已经有了答案:openCVError:Assertionfailed(scn==3||scn==4)(1个回答)关闭8年前。当我启动程序时-我收到以下错误:OpenCV错误:在cv::cvtColor,文件C:\builds\2_4_PackSlave-win64-vc12-shared\opencv\modules中断言失败(scn==3||scn==4)\imgproc\src\color.cpp,第3737行如何消除错误?代码:#include"opencv2/core/core.hpp"#include"opencv2/contrib/contrib.hpp"#i