编译器是否会优化模板bool?

时间:2014-04-16 14:29:45

标签: c++ templates

我有一个链接列表类,我刚刚编写了一组函数,以使其适用于基于范围的。要使用相同的类模板作为反向迭代器(例如你用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

1 个答案:

答案 0 :(得分:4)

C ++标准中没有关于何时执行这样的优化的内容,因此它严格遵循编译器。因此,确定的唯一方法是查阅编译器的文档或编译代码并查看反汇编。最有可能它会被优化掉,但不能保证这种行为。