【发布时间】:2016-09-04 14:03:07
【问题描述】:
This answer 大量重复表明我应该使用 #include <c*> 作为我在 C++ 代码中提取的 C 头文件,并且我应该使用 std::* 调用它们。
我一直在这样做,但我注意到一个例外。 std::assert 似乎没有被定义,即使我正确地#include <cassert>。
这里发生了什么?这是实施疏忽,还是实际例外?
【问题讨论】:
-
assert是macro -
assert很可能被实现为不能在命名空间中使用的宏(因为它不会像内联函数那样产生语言标识符) -
@SergeyA 你从来没有测试过你的代码……曾经吗?
-
@SergeyA:我支持你。在生产中停止执行操作的功能。因此,生产和调试代码的行为完全不同。如果只是在测试而不是在生产中出现问题,那么你有一些特殊的代码。哦,等等,我们有一些针对异常情况的东西。
-
@SergeyA:对于那些发现你的断言 “所有带有无效变体的有趣事情通常发生在优化代码中” 是错误的人来说,这是有价值的。
标签: c++ c namespaces std assert