Biorąc pod uwagę przypadek, w którym nie ma miejsca na kopiowanie (pre C++ 17).MyClass obj = MyClass(); Czy "MyClass()" odnosi się tutaj do tymczasowego obiektu?
Od cppreference (ponownie, załóżmy, C++ 14):
obiekty tymczasowe są tworzone w następujących sytuacjach:
- wiążące odniesienie do prvalue
- Zwracanie prvalue z Konwersja, która tworzy wyrażenie lambda o wartości
- kopiowaniem inicjalizacji, który wymaga konwersji inicjatora
- liście inicjalizacji, który konstruuje std :: initializer_list
- inicjalizacji odniesienia do innego typu zamiennego, ale czy do bitfield.
Wszystkie przypadki wyjątkiem pierwszego wydawać nieistotne, pierwszy z nich wydaje się oznaczać C++ - odniesienia styl wiązania (int &&x = 5;
BTW nie rozumiem w takiej sytuacji stwierdzenie, że uzupełnienia tymczasowe są niszczone na koniec pełna ekspresja ..., o której mowa w punkcie 5, nie wydaje się być niszczona na końcu tego oświadczenia).
Tak więc, jak rozumiem, pojęcie obiektu tymczasowego obejmuje tylko te, które są gwarantowane do przechowywania (co nie ma miejsca w mojej sytuacji z powodu możliwej elizacji). Mam rację? Albo co tu nie rozumiem?
okazji ma żadnej różnicy pomiędzy MyClass()
i 4
w int x = 4;
(lub 2 + 2
w int x = 2 + 2;
)? Tak jak być może jestem niepoprawny, a pierwszy NIE odnosi się do obiektu tymczasowego, podczas gdy pozostałe dwa nie ...
Jest liczony na podstawie „nawrócenia, który tworzy prvalue” przypadek. (Tak, to nie wygląda jak konwersja, ale standardowe grupy 'T()', 'T (1)' i 'T (1,2)' razem.) –
@ T.C. tak więc jest coś tymczasowego tylko dla przypadku 'MyClass() '? Nie dla "4", które zaproponowałem jako przykład? W takim razie, jaka jest racjonalność takiej różnicy? Może mógłbyś stworzyć odpowiedź? .. Biorąc pod uwagę, że wydajesz się zaprzeczać istniejącemu już istniejącemu. – ledonter
Czyż 4 nie byłby jeszcze objęty "konwersją, która tworzy wartość pryncypium"? W tym przypadku jest to konwersja z liczby całkowitej na liczbę całkowitą. –