Verlassen Sie sich auf ADL für std :: begin () und std :: end ()?

8

Wenn Sie über einen Standardcontainer iterieren, denken Sie, dass es eine gute Idee ist, das Präfix std:: wegzulassen und sich auf ADL zu verlassen, um die Definition zu finden? Beispiel:

%Vor%

Gibt es Gründe, dies zu tun oder nicht?

    
StackedCrooked 28.06.2012, 10:21
quelle

2 Antworten

13

Wenn Sie ADL verwenden möchten, um den Containertyp ändern zu können, ohne die Schleifen zu ändern, fügen Sie using std::begin; using std::end; hinzu. Dadurch wird sichergestellt, dass die Funktionen std für Container aus anderen Namespaces mit den Membern begin und end gefunden werden, jedoch keine freien Funktionen in ihrem Namespace.

%Vor%     
R. Martinho Fernandes 28.06.2012, 10:28
quelle
8
  

Glauben Sie, dass es eine gute Idee ist, das Präfix std :: wegzulassen und sich auf ADL zu verlassen, um die Definition zu finden?

Ich denke, es ist eine gute Idee. In Vorlagen wie diesem wird es notwendig:

%Vor%

Da Container ein Typ sein kann, der vom Programmierer definiert wurde, zB im Namespace xyz , wie würde dann die obige Funktionsvorlage funktionieren, wenn ich std::begin anstatt nur begin (im Initialisierungsteil) schreibe ?

    
Nawaz 28.06.2012 10:30
quelle

Tags und Links