我知道C使用assert()支持函数断言.是否有任何方式/库支持C/C++中的性能断言?有其他语言吗?
以下内容:
perf_assert_begin(ID1)
...
...
/* assert the time taken is less than 2000 ms */
perf_assert_end(ID1, interval(ID1) < 2000)
最佳答案 可以使用< cassert>中的assert来完成断言.或static_assert,它内置于语言中.
那么,为什么不手动花时间检查断言语句中的时差呢?
#include <cassert>
#include <chrono>
#ifndef NDEBUG
auto start = std::chrono::high_resolution_clock::now();
#endif
...
#ifndef NDEBUG
assert(std::chrono::duration_cast<milliseconds>(
std::chrono::high_resolution_clock::now() - start).count() < 2000
);
#endif
如果定义了NDEBUG,预处理程序指令只允许代码传递给编译器.如果定义了NDEBUG,则assert仅执行操作,而没有其他的则不能正常工作.
为了防止在使用起始标识符定义NDEBUG时发生名称冲突,您可以使用__COUNTER__执行一些GCC-magic以使标识符唯一(特定于编译器)或将整个内容移动到单独的范围中.这对你来说可能不是问题,但是如果从某个角度看你的程序,有些人可能会对条件定义的变量感到惊讶.