Was passiert bei std::queue::front() wenn size() == 0?



  • Hallo,

    wie der Titel schon sagt:
    Was passiert bei std::queue::front() , wenn keine Einträge mehr in der Queue sind?
    Was wird zurückgegeben?

    Im Standard (http://www.cplusplus.com/reference/queue/queue/front/) scheint nichts zu stehen!?

    Gruß


  • Mod

    Es passiert das gleiche wie bei anderen Containern, wenn du front benutzt, obwohl sie leer sind. Sprich: Lass das lieber sein 😉 .

    Das ist übrigens nicht der Standard, sondern eine Referenz. Laut Standard ist front das front des unterliegenden Containers und das front eines STL-Containers ist *begin() . Bei einem leeren Container also eine Dereferenzierung eines ungültigen Iterators. Nicht so gut :xmas2:



  • SeppJ schrieb:

    Nicht so gut :xmas2:

    Dass das nicht so gut ist, ist mir klar 😃 Also UB...

    SeppJ schrieb:

    Das ist übrigens nicht der Standard, sondern eine Referenz.

    Ich dachte immer, dass das gleich zu setzen ist, bzw. direkt dem Standard entspricht.



  • theliquidwave schrieb:

    Im Standard (http://www.cplusplus.com/reference/queue/queue/front/) scheint nichts zu stehen!?

    Das ist nicht der Standard.
    Der Standard sagt:

    N3337 $23.3.2.8 / 3 schrieb:

    The effect of calling front() or back() for a zero-sized array is undefined.



  • theliquidwave schrieb:

    Im Standard (http://www.cplusplus.com/reference/queue/queue/front/) scheint nichts zu stehen!?

    Seit wann ist denn das der Standard?!

    Egal:
    d.front() entspricht einem *d.begin() .
    Für einen leeren Container gilt: d.begin()==d.end() .
    d.end() gibt den Iterator mit dem "past-the-end-Wert" des Containers zurück.
    Die Standardlibrary gibt keine Garantie, dass dieser Iterator dereferenzierbar ist.
    Also: Undefiniertes Verhalten.



  • Ich dachte immer, dass das gleich zu setzen ist, bzw. direkt dem Standard entspricht.

    Nein, da können auch Fehler drinnen sein, oder Tatsachen gar nicht drin vorkommen. Immer hier nachfragen, wenn du Zweifel hast.


  • Mod

    Sone schrieb:

    N3337 $23.3.2.8 / 3 schrieb:

    The effect of calling front() or back() for a zero-sized array is undefined.

    Das bezieht sich aber nur auf std::array.



  • Sone schrieb:

    Immer hier nachfragen, wenn du Zweifel hast.

    Im Zweifelsfall aber besser nicht auf Sone hören 😃


Log in to reply