- Оператор присваивания в C++ (например, x = 5) возвращает значение, помимо копирования этого значения в переменную. Каково значение, возвращаемое (то есть, что является результатом) оператора присваивания?
ответ
В соответствии со стандартом C++ (5.18 Назначение и назначение составного оператора)
1 Оператор присваивания (=) и операторы присваивания составных все группы справа налево. Все они требуют модусов фи способное именующее выражения, как их левых операнда и возвращает именующее выражение со ссылкой на левый операнд
и
2 В простом присваивании (=), то значение выражения заменяют что объекта, на который ссылается левый операнд.
Таким образом, если вам следующий фрагмент кода
int x;
x = 5;
то х получить значение 5 и выражение присваивания возвращает lvalue
х. Это позволяет объединить оператор присваивания, например, следующим образом
(x = 5) += y;
, потому что выражение x = 5
возвращает Lvalue из x
.
В C этот код будет недействительным, поскольку в C выражение присваивания возвращает rvalue
.
В C++ встроенный оператор назначения копирования вырабатывает выражение lvalue, которому может быть присвоено. Эффективно, как будто он был объявлен с результатом ссылочного типа.
Пользовательский оператор присваивания копий для типа класса может иметь любой тип возврата, включая (который ИМО был бы идеальным) void
.
Однако, если класс должен использоваться как тип элемента стандартного контейнера, тогда он подчиняется требованиям стандартной библиотеки, а затем оператор присваивания экземпляра класса должен возвращать ссылку на назначенный объект.
C++ 11 §17.6.3.1/2 (utility.arg.requirements/2), таблицы 22 и 23 (от N3290):Чтобы объявить оператор присваивания копии удаленным или дефолтным, он должен вернуть ссылку на тип назначенного объекта, например
struct S
{
auto operator=(S const&) -> S& = delete;
};
определенного пользователем оператора копирующего присваивания может быть определен только для типа класса, а не для перечислимого типа, потому что это необходимо, чтобы быть не статической функцией-члена.
- 1. оператор присваивания в C++
- 2. Оператор присваивания в C#
- 3. C++ "| =" оператор присваивания
- 4. Оператор присваивания строк C++
- 5. Оператор виртуального присваивания C++
- 6. C++ оператор присваивания решения
- 7. C++ оператор присваивания ассоциативность
- 8. Оператор присваивания перегрузки C++
- 9. C++ оператор присваивания перегрузки
- 10. Оператор прямого присваивания в C++
- 11. оператор присваивания перегрузка в C++
- 12. Условный оператор и оператор присваивания в C
- 13. Оператор присваивания
- 14. Оператор присваивания C++ Назначение NULL
- 15. C# mimic overridding оператор присваивания (=)
- 16. C++: чистый оператор виртуального присваивания
- 17. C++ оператор присваивания 11 строка
- 18. Оператор присваивания C++ не назначает
- 19. Оператор присваивания класса шаблона C++
- 20. C++ - Невозможно перегрузить оператор присваивания
- 21. C++ по умолчанию оператор присваивания
- 22. Оператор присваивания C++ и перегрузка
- 23. Оператор присваивания в связанном списке C++
- 24. оператор присваивания в C++ удалить память
- 25. C++ - копия Оператор присваивания в шаблоне
- 26. Оператор присваивания C++ в производном классе
- 27. Как перегрузить оператор присваивания в C++?
- 28. оператор присваивания в функциональном параметре C++
- 29. Оператор присваивания в состоянии
- 30. Оператор присваивания двоичного поиска
Хмм, не ваш вопрос содержит ответ? Оператор присваивания возвращает назначенное значение (для встроенных типов, для пользовательских типов он возвращает то, что определено пользователем ...) – Hcorg