0

鉴于下面的代码,我如何通过头文件确认v[0]is的类型?const int&

#include <vector>

int main()
{
    const std::vector<int> v(1);
    decltype(v[0]) b = 1;
}

例如,这就是我在 VS2010 中尝试做的事情:

  1. 将鼠标悬停在vector上面,我用鼠标右键单击并选择Go to definition,我发现

    template<class _Ty, class _Ax = allocator<_Ty> >
    class vector
        : public _Vector_val<_Ty, _Ax>
    {}
    
  2. 然后我搜索operator[]并发现const_reference operator[](size_type _Pos) const

  3. 再次将鼠标悬停在鼠标上方时,const-reference我单击鼠标右键并选择Go to definition并找到了typedef typename _Alloc::const_reference const_reference;.

从现在开始,我不知道该去哪里。

4

2 回答 2

3

你真的不应该使用实现来获取这样的信息。typedef 链可能很长。而是参考反映标准信息的语言标准或cppreference.com 。std::vectora的情况下,const_reference定义为引用类型value_type为类型的常量T(或_Ty用于 MS 实现)。

*。在 C++11 之前,它被声明为对类型常量的引用Allocator::reference

于 2013-05-27T00:52:29.463 回答
0

使用 type_traits和 static_assert。std::is_same 可以直接告诉你它是否是 const int& 。对于其他情况,您可以使用 is_reference 或其他查询。static_assert 由智能感知评估,因此您甚至可以在不编译的情况下获得结果。

于 2013-05-28T20:08:40.553 回答