2016-04-15 5 views
-1

Hat std::atomic<basic_type> Garantie der Wert von basic_type 0/0.0 zu sein (je nachdem, was anwendbar ist), wenn sie als Klassenmitglied erstellt, ohne explizit für initialisiert wird:Ist std :: atomic Garantie Initialisierung Initialisierung von Typen wie Int, Float usw. auf 0/0.0?

  • int/uint/short/ushort/etc
      ...
    • und; float/double

    ?

    Beispiel:

    class Foo 
    { 
    public: 
        std::atomic<int> bar; 
    }; 
    
    int main() 
    { 
        Foo foo; 
        return foo.bar; //foo.bar guaranteed to be 0? 
    } 
    
  • +0

    Ich nehme an, Sie haben gelesen [das Handbuch] (http://en.cppreference.com/w/cpp/Atom/Atom/Atom) und fand es fehlend. Gibt es einen Teil von 'es findet keine Initialisierung statt der Null-Initialisierung von statischen und thread-lokalen Objekten statt', die Sie unklar finden? Im Grunde bietet 'std :: atomic bar' die gleichen (wenigen) Garantien für den Anfangswert wie' int bar'. –

    Antwort

    1

    aus cppreference Dokumentation von std::atomic default constructor:

    Der Defaultkonstruktor ist trivial: keine Initialisierung erfolgt ungleich Null Initialisierung von statischen und gewinde lokalen Objekten. Std :: atomic_init kann verwendet werden, um die Initialisierung abzuschließen.

    daher in Ihrem Fall werden Sie die gleichen Garantien haben, als ob Sie einfach erklärt hatte int bar;