首页 > 解决方案 > 这个表达式是什么意思:bool(__args...)

问题描述

我刚刚在 C++ 的 STL 中偶然发现,在vector标题中发现了一个非常令人惊讶的异常。
从一些不必要的垃圾中清理出来,归结为:(
这个片段可以在vectorSTLvector标头中的类中找到)

template<typename... _Args>
reference emplace_back(_Args&&... __args) {
    push_back(bool(__args...));
    return back();
}

void push_back(bool __x) {
    if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_addr())
        *this->_M_impl._M_finish++ = __x;
    else
         _M_insert_aux(end(), __x);
}

正如标题中已经概述的那样,我对bool(__args...)这种对我来说毫无意义的表达感到非常惊讶。
我希望有人能给黑暗带来光明并帮助我。

编辑:回答,我有点懒

解决办法找到了,我有点懒。
我使用我的 IDE 方法解析器跳转到声明。
但遗憾的是,它把我引向了stl_bvector.h上面的标题和给定的方法。
因为这个头文件似乎只处理std::vector<bool>代码的实现,所以更有意义。

标签: c++stl

解决方案


我认为您正在检查std::vector<bool>.

bool(__args...)bool正在从参数包__args...(扩展为逗号分隔的表达式)构造一个临时值,然后将临时bool值传递给push_back(bool).


推荐阅读