Jakie są domyślne wartości dla członków struktury i członków klasy w języku C++ oraz w jaki sposób reguły te różnią się (np. Między klasami/strukturami/elementami pierwotnymi/itd.)? Czy istnieją okoliczności, w których reguły dotyczące wartości domyślnych są różne?Jaka jest wartość domyślna dla członków klasy C++?
Odpowiedz
Nie ma różnic między elemencie i klas w tym zakresie w C++. Wszystkie są nazywane po prostu typami klas:.
Członkowie typów klas nie mają wartości domyślnych w ogólnym przypadku. W celu dla członkiem klasy, aby uzyskać deterministyczny wartość musi być zainicjowany, które mogą być wykonywane przez
- konstruktora domyślnego członu samego
- Konstruktor listy inicjator klasy otaczającej
- Jawnie określony inicjator obiektu klasy otaczającej (który zawiera inicjowanie wartości i inicjalizację za pomocą agregującego inicjalizatora).
Dodatkowo, wszystkie obiekty o statycznym czasie przechowywania są zerowane przy inicjalizacji programu.
Oprócz powyższych przypadków, członkowie klasy po raz kolejny nie mają wartości domyślnych i początkowo będą zawierać nieprzewidywalne wartości śmieci.
Jeśli pamięć statyczna zostanie zainicjowana od zera, zależy to od używanego systemu operacyjnego. – jpyllman
@jpyllman: Nie. Pamięć statyczna jest zawsze inicjalizowana od zera. Jest gwarantowany (wymagany) przez język, niezależnie od systemów operacyjnych. – AnT
OK, próbowałem znaleźć takie informacje, ale ich nie znalazłem. Zawsze zakładałem, że jest niezdefiniowana, chyba że ustawisz jakąś wartość. – jpyllman
Tak, jest jeden. Jeśli zainicjować obiekt z domyślnego konstruktora i używać nawiasów następnie członkowie POD będzie zero zainicjowany:
someClass * p = new someClass();
To stwierdzenie nie jest prawdziwe. Jest bardzo zależny od tego, kto napisał kompilator. Nic w standardzie nie mówi, że wartość POD zostanie zainicjowana na nic, chyba że programista przydzieli jej wartość. Właśnie dlatego istnieją narzędzia programistyczne, takie jak valgrind. – WhoCares
@DamianDixon Nie, patrz: 'C++ 14 8.5 11' *" Obiekt, którego inicjator jest pustym zestawem nawiasów, tj.(), Musi być zainicjalizowany wartością. "*. '8.5 8' *" Aby wartość-zainicjować obiekt typu T oznacza: ... jeśli T jest klasą (prawdopodobnie kwalifikowaną cv) bez dostarczonego przez użytkownika lub usuniętego domyślnego konstruktora, to obiekt jest inicjalizowany od zera ... "*' 8.5 6' * "Aby wyzerować-zainicjować obiekt lub referencję typu T oznacza: ... - jeśli T jest typem klasy niezależnej od klasy (być może kwalifikowanym cv), każdy niestatyczny element danych i każdy obiekt podrzędny klasy podstawowej jest inicjalizowany od zera ... "* – HolyBlackCat
@HolyBlackCat, Musisz jednak użyć pustych nawiasów. Jeśli nie dodajesz(), to znaczy zapewniasz pewien rodzaj inicjalizacji, to nie dostajesz tego zachowania i kończysz z niezainicjowanym POD. Dlatego programista musi coś zrobić, aby zainicjować zmienną. – WhoCares
- 1. domyślna widoczność członków/członków klasy C++
- 2. Jaka jest wartość domyślna elementu w tablicy?
- 3. Klasy ES6 Wartość domyślna
- 4. Jaka jest domyślna wartość atrybutu "position" dla DIV?
- 5. Wartość domyślna dla klasy zdefiniowanej przez użytkownika w C#
- 6. Wartość domyślna maxConcurrentOperationCount dla NSOperationQueue
- 7. C#, domyślna wartość parametru dla IntPtr
- 8. celem-c domyślna metoda init dla klasy?
- 9. Jaka jest domyślna czcionka dla ggplot2
- 10. Wartość domyślna dla bool w C#
- 11. Jaka jest wartość domyślna (IEnumerable <T>)?
- 12. Wartość domyślna BOOL
- 13. Niestandardowe atrybuty dla członków klasy
- 14. Wartość domyślna typu dynamicznego?
- 15. Wykorzystanie Domyślna wartość enum C++
- 16. Jaka jest domyślna wartość ConnectTimeout w ciągu połączenia?
- 17. combobox wartość domyślna winforms C#
- 18. Wartość domyślna dla boost :: shared_ptr na konstruktora klasy
- 19. Wartość domyślna dla VK_CONTROL/VK_MENU/VK_SHIFT
- 20. C++ Czy poprawnie wywoływać "atrybuty" członków klasy?
- 21. Parametr powershell wartość domyślna (cmdlet C#)
- 22. Jaka jest domyślna nazwa pola tekstowego dla Summernote?
- 23. Jaka jest domyślna ścieżka do bazy danych dla MongoDB?
- 24. Jaka jest domyślna nazwa użytkownika dla instancji SSH EC2 Linux?
- 25. RestTemplate - domyślna wartość limitu czasu
- 26. Wartość domyślna dla Rational Number struct
- 27. Dlaczego wartość rwartości w C++ 0x nie jest domyślna?
- 28. SQL: Jaka jest domyślna kolejność zapytań?
- 29. Python: Jaka jest domyślna obsługa SIGTERM?
- 30. Jaka jest domyślna ścieżka debug.keystore na Macu?
Zobacz także: http://stackoverflow.com/questions/1613341/what-do-the-following-phrases-mean-in-c-zero-default-and-value-initializati, http: // stackoverflow. com/questions/2417065/c-does-the-default-constructor-initialize-built-in-types, http://stackoverflow.com/questions/1069621/are-members-of-ac-struct-initialized-to- 0-by-default – outis