¿Por qué usar funciones begin y end no miembro en C++11?


Cada contenedor estándar tiene un método begin y end para devolver iteradores para ese contenedor. Sin embargo, C++11 aparentemente ha introducido funciones libres llamadas std::begin y std::end que llaman a las funciones miembro begin y end. Así que, en lugar de escribir

auto i = v.begin();
auto e = v.end();

Escribirías {[15]]}

using std::begin;
using std::end;
auto i = begin(v);
auto e = end(v);

En su charla, Escribiendo C++moderno, Herb Sutter dice que siempre debe usar las funciones libres ahora cuando desee el iterador de inicio o fin para un contenedor. Sin embargo, él no entra en detalles sobre por qué usted querría hacerlo. Mirando el código, te salva a todos de un carácter. Por lo tanto, en lo que respecta a los contenedores estándar, las funciones libres parecen ser completamente inútiles. Herb Sutter indicó que había beneficios para los envases no estándar, pero de nuevo, no entró en detalles.

Entonces, la pregunta es qué hacen exactamente las versiones de función libre de std::begin y std::end más allá de llamar a su función miembro correspondiente versiones, ¿y por qué querrías usarlas?


Warning: Undefined property: agent_blog_content::$date_asked in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 32

Warning: Undefined property: agent_blog_content::$count_answers in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 52