繁体   English   中英

在c ++中gsl assert vs assert的优势?

[英]Advantage of gsl assert vs assert in c++?

我知道在C ++中使用assert 想知道是否存在任何差异和任何好处(我认为assert是更昂贵的,如https://www.learncpp.com/cpp-tutorial/7-12a-assert-and-static_assert/中提到的那样性能明智,是两个相同?)使用gsl_assert over assert 为什么gsl_assert被添加到gsl库中,因为已经在c ++中assert支持(即使assert来自'C',因为我们在C ++中添加了#include<cassert>来使用assert )?

#include <iostream>
#include <gsl/gsl_assert>
using namespace std;

int main()
{
    int val;
    cin >> val;
    Ensures( val > 5 );
    return 0;
}

这不是性能问题; 这是一个灵活性的问题。

C断言

如果条件为真,这只会终止(在调试版本中),并且通常在发布版本中不执行任何操作。

GSL合同检查

根据配置 ,这可以:

  1. 抛出一个例外
  2. 终止
  3. 没做什么
    • ...除了向优化器发出信号,我们期望条件保持(如果支持)

在某些配置模式中,我认为GSL的ExpectsEnsures宏最终与assert完全相同。 但不是全部。

但值得注意的是,GSL行为似乎不依赖于构建配置(调试与发布)。 我想(我只是在猜测),对于性能关键代码,合理的项目维护者会在调试版本中选择模式#1或#2,在版本构建中选择#3(或可能是#2)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM