GSL断言与C ++中的断言的优势?

时间:2019-05-29 12:35:18

标签: c++ guideline-support-library

我知道在C ++中使用assert。想要知道在{{1}中使用assert和{{1} }}?为什么gsl_assert被添加到gsl库中,因为c ++已经支持assert(即使gsl_assert来自'C',因为我们添加了assert以使用{{1 }}(在C ++中)?

assert

1 个答案:

答案 0 :(得分:2)

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

C断言

如果条件为真,它将终止(在调试版本中),通常在发行版本中不执行任何操作。

GSL合同检查

Depending on configuration,这可以:

  1. 引发异常
  2. 终结
  3. 什么都不做
    • …除了向优化器发出信号,我们希望条件保持不变(如果支持)

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

但是,值得注意的是,GSL行为似乎并不依赖于构建配置(调试与发行版)。我猜(我只是在猜),对于性能至关重要的代码,明智的项目维护人员会在调试版本中选择模式#1或#2,在发行版本中选择模式#3(或可能是#2)。