有没有一些通用的偏好或规则,可以解释在什么情况下应该使用容器特定版本的begin和end,而不是自由函数std::begin和std::end?
我理解的是,如果该函数是一个模板,其中容器类型是一个模板参数,那么应该使用std::begin和std::end,例如:
template<class T> void do_stuff( const T& t )
{
std::for_each( std::begin(t), std::end(t), /* some stuff */ );
}
在其他情况下,例如已知容器类型的标准/成员函数等情况下,使用
std::begin(cont)
和std::end(cont)
是否仍然是更好的实践,还是应该优先使用容器的成员函数cont.begin()
和cont.end()
?我是否正确地假设通过调用
cont.end()
而不是std::end(cont)
没有性能上的好处?
using std::begin; begin(c);
来让ADL发挥作用。 - UncleBens