Illegal?



  • Old McDonald schrieb:

    Und operator[n] ist definiert über *(begin() + n) . Also darf man das inzwischen.

    Das allein (also ohne das, was Du vorher geschrieben hast) garantiert allerdings nicht, dass die Elemente hintereinander im Speicher liegen. basic_string<>::begin() muss ja keinen Zeiger zurückgeben.

    BTW: Die &*(s.begin() + n) == &*s.begin() + n -Garantie gibt es scheinbar nicht in C++03 -- sie ist zumindest nicht in N1804 von 2005 drin, wenn ich nichts übersehen habe.

    Gruß,
    SP



  • Ja, das allein nicht. Aber zusammengenommen mit der Garantie, dass &*begin() + n == &*(begin() + n) , folgt natürlich &s[n] == &s[0] + n .

    In C++03 gab's die Garantie nicht, das ist mir auch aufgefallen, als ich ein wenig gesucht habe. Also ist die Garantie bei std::vector älter.


Anmelden zum Antworten