2016-09-29 2 views
0

Was ist der Vorteil der Verwendung der längeren Version (something).operator[]() statt einfach (something)[]?Operator [] lange und kurze Versionen

Zum Beispiel:

std::array<int, 10> arr1; 
std::array<int, 10> arr2; 

for(int i = 0; i < arr1.size(); i++) 
    std::cout << arr1[i] << ' '; 
    std::cout << std::endl; 

for(int i = 0; i < arr2.size(); i++) 
    std::cout << arr2.operator[](i) << ' '; 
    std::cout << std::endl; 
+1

gibt es kein Vorteil wirklich. Sie können den zweiten jedoch für Zeiger verwenden: 'arr2-> operator [] (i)' – Hayt

Antwort

1

Es gibt keine. Die [] ist nur syntaktischer Zucker für operator[] auf benutzerdefinierten Typen. Sie benötigen nur die Syntax operator, wenn Sie diese Funktionen selbst definieren. Dies gilt für alle Operatoren wie operator(), operator[], operator new, operator=, ...

0

syntaktischer Zucker

zusammengestellt mit g ++ -g -std = Gnu ++ 0x ...

0000000000400554 <main>: 
#include <array> 

int main() { 
    400554:  55      push %rbp 
    400555:  48 89 e5    mov %rsp,%rbp 
    400558:  48 83 ec 60    sub $0x60,%rsp 

    std::array<int, 10> arr1; 
    std::array<int, 10> arr2; 

    arr1[6]; 
    40055c:  48 8d 45 d0    lea -0x30(%rbp),%rax 
    400560:  be 06 00 00 00   mov $0x6,%esi 
    400565:  48 89 c7    mov %rax,%rdi 
    400568:  e8 19 00 00 00   callq 400586 <std::array<int, 10ul>::operator[](unsigned long)> 

    arr2.operator[](6); 
    40056d:  48 8d 45 a0    lea -0x60(%rbp),%rax 
    400571:  be 06 00 00 00   mov $0x6,%esi 
    400576:  48 89 c7    mov %rax,%rdi 
    400579:  e8 08 00 00 00   callq 400586 <std::array<int, 10ul>::operator[](unsigned long)> 
    40057e:  b8 00 00 00 00   mov $0x0,%eax 
} 
    400583:  c9      leaveq 
    400584:  c3      retq 
    400585:  90      nop 
+0

Ja, ich habe ursprünglich 33 ausgewählt, um es einfacher zu machen, in der Baugruppe zu erkennen. auf 6 geschaltet –

Verwandte Themen