c++ - assert 和 static_assert 有什么区别?

标签 c++ assert

我知道 static_assert 在编译时进行断言,而 assert 在运行时进行断言,但实际上有什么区别?据我了解,在内心深处它们是代码片段,例如

if (condition == false) exit();
  • 谁能给我一个例子,说明 only static_assertonly assert 会在哪里工作?<
  • 他们能做一些简单的 if 语句做不到的事情吗?
  • 使用它们是不好的做法吗?

最佳答案

你问了三个问题,所以我会试着回答每个问题。

  • 谁能给我一个例子,说明 only static_assertonly assert 可以在哪里工作?<

static_assert 非常适合在编译时测试代码中的逻辑。 assert 非常适合在运行时检查一个你期望应该总是有一个结果的案例,但在意想不到的情况下可能会以某种方式产生意想不到的结果。例如,您应该只使用 assert 来确定传递给方法的指针是否为 null,而这似乎永远不会发生。 static_assert 无法捕捉到这一点。

  • 他们能做一些简单的 if 语句做不到的事情吗?

assert 可用于中断程序执行,因此您可以使用 if,适当的错误消息,然后停止程序执行以获得类似的效果,但是assert 在这种情况下要简单一些。 static_assert 当然只对编译问题检测有效,而 if 必须在编程上有效并且不能在编译时评估相同的期望。 (但是,if 可用于在运行时发出错误消息。)

  • 使用它们是不好的做法吗?

一点也不!

关于c++ - assert 和 static_assert 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18210270/

相关文章:

eclipse - 找不到模拟 assertEquals

c# - NUnit 与 Debug.Assert 冲突

c++ - 有没有办法不使用命名空间中的项目?

c++ - 如何从动态库中调用未知函数?

c++ - C++ 中的 sqldriverconnect 无法连接到本地数据库 sql 2008

c++ - 构造函数排序(全局范围)问题

python - 你能有太多的断言(在 Python 中)吗?

java - 如何在for循环中为两个不同的值断言true?

c++ - g++ std::chrono 断言中断

c++ - 有没有一种简单的方法来获取用 C++ 打印的字符数?