for(unsigned int i = 0; i < x.size(); i++)
assert(x[i] > 0);
不调试时(NDEBUG
标志),结果是一个空for
循环。有没有一种干净的方法来处理这个(不执行空for
循环);最好没有预处理器指令,因为它首先会破坏的目的assert
。
for(unsigned int i = 0; i < x.size(); i++)
assert(x[i] > 0);
不调试时(NDEBUG
标志),结果是一个空for
循环。有没有一种干净的方法来处理这个(不执行空for
循环);最好没有预处理器指令,因为它首先会破坏的目的assert
。
inline bool all_positive(std::vector<int> const &x)
{
for (size_t i = 0; i < x.size(); i++)
if (x[i] <= 0)
return false;
return true;
}
然后
assert(all_positive(x));
(尽管这可能会在NDEBUG
定义时为您提供“未使用的功能”警告)。
一个好的优化器应该能够在NDEBUG
定义时消除整个循环(我刚刚测试了我的,它确实做到了)。
#ifndef NDEBUG
或者,您可以用/包围整个循环#endif
。你说这“首先会破坏目的assert
”,但我并没有真正遵循推理。
assert
NDEBUG
如果已定义,语句将变为无操作。要为整个循环做类似的事情,你可以做
#ifndef NDEBUG
for(unsigned int i = 0; i < x.size(); i++)
assert(x[i] > 0);
#endif