Выражения default value (справочник по C#)
Выражение default value создает значение по умолчанию для типа. Выражения default value бывают двух видов: вызов оператора default и литерал default.
Также используется ключевое слово default в качестве метки варианта по умолчанию в default .
оператор default
Оператор default принимает в качестве аргумента имя типа или параметр типа, как показано в следующем примере:
Литерал default
Начиная с C# 7.1, можно использовать литерал default для создания значения по умолчанию для типа, если компилятор может вывести тип выражения. Литеральное выражение default создает то же значение, что и выражение default(T) , где T является выведенным типом. Литерал default можно использовать в любом из следующих случаев:
Спецификаторы default и delete
Если внутри класса мы создаем конструктор с параметрами, то конструктор по умолчанию автоматически не создается. Если конструктор по умолчанию нужен и реализация по умолчанию устраивает, то можно после закрывающей круглой скобки указать оператор = после которого добавлен спецификатор default :
В этом случае компилятор автоматически создаст тело конструктора с реализацией по умолчанию. Спецификатор default допускается указывать не только для конструктора по умолчанию, но и для других специальных методов, генерируемых компилятором по умолчанию: для конструктора копирования и конструктора перемещения, деструктора, оператора присваивания и оператора перемещения:
Спецификатор delete предназначен для пометки методов, которые не должны вызываться:
В этом случае попытка вызвать конструктор с параметром типа int приведет к ошибке:

Учебник C++ (Qt Creator и MinGW) в формате PDF
Помощь сайту
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов
Зачем нужен оператор default(T)?
При попытке вернуть из метода return new Size(); вылетает ошибка Do not use default value type constructor и предлагает заменить строку на return default(Size); . Как бы не проблема использовать default(T) , только хочется понять какая разница?

![]()
Дело в том, что для структур переопределение конструктора по умолчанию на текущий момент не разрешено. У структур всегда есть начальное значение (инициализированное нулями), которое может представлять собой «плохое», неправильное значение. Например, CancellationToken : его начальное значение совпадает с CancellationToken.None .
Если вы используете синтаксис с new , это выглядит так, как будто бы вы создаёте хорошее, пригодное к использованию как и все другие значение. Синтаксис с default позволяет подчеркнуть, что это специальное неинициализированное значение.
Заметьте, что это не ошибка компиляции, а предупреждение анализатора стилей. Вы вполне можете отключить его в настройках, оно влияет лишь на читаемость кода.
Заметьте, что если разрешат конструкторы структур без параметров, отличие между new T() и default(T) станет более серьёзным: default(T) будет означать неинициализированное, прописанное нулями значение, а конструктор сможет выполнить добавочную инициализацию.