To naprawdę nie jest jasne, dlaczego ktokolwiek nazwałby konkretną formę inicjalizacji "inicjowania wartości". Brzmi to tak, jakby zainicjował obiekt, nadając mu wartość ... ale to właśnie robi inicjalizacja, a nazwa nie mówi nic o wartości, której będzie używać do inicjowania.Dlaczego inicjalizacja wartości jest tak nazwana?
Odpowiedz
The Boost value_init write-up zapewnić dość szczegółową historię wartości inicjalizacji skończyło się w normie od defect report 178: More on value-initialization i wydaje się, że termin pochodzi od defect report 35: Definition of default-initialization. Chociaż żaden z tych dokumentów naprawdę zapewnić prawidłowe pochodzenie na metę ma dostarczyć kilka dobrych pomysłów, to mówi:
Pierwszy Sprostowanie techniczne dla C++ Standard (TC1), którego projekt został przekazany do wiadomości publicznej w W listopadzie 2001 r. Wprowadzono Core Issue 178 (wśród wielu innych kwestii, oczywiście).
Ta kwestia wprowadziła nową koncepcję inicjowania wartości (również poprawiono sformułowanie dla inicjalizacji zerowej). Nieformalna inicjalizacja wartości jest podobna do inicjowania domyślnego z wyjątkiem , że w niektórych przypadkach nie-statyczne elementy danych i sub-obiekty klasy podstawowej są również inicjowane wartością. Różnica polega na tym, że obiekt , który jest zainicjowany wartością, nie będzie miał (lub przynajmniej będzie mniejszy niż ) nieokreślonych wartości dla elementów danych i sub-obiektów klasy bazowej ; w przeciwieństwie do konstruowania domyślnego obiektu. (zob. Wydanie podstawowe 178 w celu uzyskania opisu normatywnego).
Aby określić wartość inicjalizacji obiektu, należy użyć inicjalizatora zestawu pustego:().
i wartość inicjalizacji jest mniej prawdopodobne, aby opuścić obiekt o wartości nieokreślonej kontra default-initalization.
OT, ale ta zmiana wprowadziła denerwujący problem; dla POD struct 'T foo = T();' i podobne instrukcje miały tylko "pracę" w C++ 03, więc w przenośnym kodzie nie mogłeś tego robić bez ryzyka, że byłby uruchomiony na Kompilator C++ 98 i cicho powodują straszny UB. –
@MattMcNabb, co jest niefortunne, czy istnieje raport o usterce? –
Nie jestem tego świadomy, to była tylko nowa rzecz dodana w TC1 –
- 1. Inicjalizacja wartości Scala
- 2. Dlaczego getline jest tak niespójny?
- 3. Dlaczego tak jest w Crossfilter?
- 4. Dlaczego MVC jest tak popularny?
- 5. Dlaczego groupby jest tak szybki?
- 6. Dlaczego Chrome jest tak szybki?
- 7. Dlaczego plik numpy.absolute() jest tak wolny?
- 8. Clojure: nazwana anonimowa funkcja
- 9. Dlaczego uruchamianie aplikacji PyQt jest tak wolne?
- 10. Dlaczego moja biblioteka statyczna jest tak ogromna?
- 11. Dlaczego konfiguracja jest tak powolna w MSYS?
- 12. Dlaczego plik putImageData jest tak wolny?
- 13. Dlaczego C# Array.BinarySearch jest tak szybki?
- 14. Dlaczego metoda resolveInfo.loadLabel() jest tak śmiesznie powolna?
- 15. Dlaczego jest tak wiele różnych konwencji wywoływania?
- 16. Dlaczego IDisposable realizacja zaprojektowany tak jest
- 17. Dlaczego pobieranie śmieci jest tak wolne?
- 18. dlaczego rozmiar stosu jest tak ograniczony?
- 19. Dlaczego setColor jest tak wolny na Androidzie
- 20. Dlaczego wywołanie metody Java jest tak kosztowne?
- 21. Dlaczego mój serwer hgweb jest tak wolny?
- 22. Dlaczego dzwonienie przez weak_ptr jest tak wolne?
- 23. Dlaczego przesyłanie do lazuru jest tak powolne?
- 24. Dlaczego rekursja w javascript jest tak powolna?
- 25. Dlaczego kod metody Marshal.WriteInt64 jest tak skomplikowany?
- 26. Dlaczego przesyłanie tablic (wektorów) jest tak wolne?
- 27. Dlaczego cv :: resize jest tak wolny?
- 28. Dlaczego proces budowania Titanium jest tak wolny?
- 29. Dlaczego Deque Pypy jest tak wolny?
- 30. wzór ciasta - dlaczego jest tak skomplikowany?
Termin pojawia się po raz pierwszy w [N1191] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1999/n1191.pdf). –
Być może to fakt, że faktycznie * robi * zawsze daje jakąś sensowną wartość. Domyślna inicjalizacja często nie działa. – chris