简述
就常规来讲,当我们使用std::begin()函数来取得一个容器的迭代器时,我们会认为不管什么情况下,都会返回一个指向该容器的普通迭代器,但是实际上并不是这样,当我们通过Const&传递实参时,std::begin(const T& container)会返回一个const_iterator,而不是iterator。这一点同样的也在Effective Modern C++的Item 13: Prefer const_iterators to iterators中有所谈及。 具体可以看下述代码演示。
具体演示
可以看到如上述所讲,m_cbegin()所返回的是const_iterator,这里的decltype(auto)则是希望它按照decltype的方式来推导我们的返回类型。