我有一个链接列表类,我刚刚编写了一组函数,以使其适用于基于范围的。要使用相同的类模板作为反向迭代器(例如你用rbegin()得到的反向迭代器)(例如你用begin()获得),我在模板参数中添加了一个bool。在增加或减少期间,检查bool一次。它会被编译器优化掉还是会在运行时进行检查?
template< typename TYPE >
template< typename LINKTYPE, typename LINK, const bool REVERSE >
LinkList<TYPE>::IteratorBase<LINKTYPE, LINK, REVERSE> LinkList<TYPE>::IteratorBase<LINKTYPE, LINK, REVERSE>::operator++( int ) {
Link<TYPE> *old = cur;
if ( cur ) {
cur = REVERSE ? cur->GetPrevious() : cur->GetNext();
return old;
}
cur = nullptr;
return old;
}
这是代码的更完整摘录:http://pastebin.com/vv7Wgm9T
答案 0 :(得分:4)
C ++标准中没有关于何时执行这样的优化的内容,因此它严格遵循编译器。因此,确定的唯一方法是查阅编译器的文档或编译代码并查看反汇编。最有可能它会被优化掉,但不能保证这种行为。