Default c что это
Перейти к содержимому

Default c что это

Выражения 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)
Учебник 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) , только хочется понять какая разница?

введите сюда описание изображения

user avatar

Дело в том, что для структур переопределение конструктора по умолчанию на текущий момент не разрешено. У структур всегда есть начальное значение (инициализированное нулями), которое может представлять собой «плохое», неправильное значение. Например, CancellationToken : его начальное значение совпадает с CancellationToken.None .

Если вы используете синтаксис с new , это выглядит так, как будто бы вы создаёте хорошее, пригодное к использованию как и все другие значение. Синтаксис с default позволяет подчеркнуть, что это специальное неинициализированное значение.

Заметьте, что это не ошибка компиляции, а предупреждение анализатора стилей. Вы вполне можете отключить его в настройках, оно влияет лишь на читаемость кода.

Заметьте, что если разрешат конструкторы структур без параметров, отличие между new T() и default(T) станет более серьёзным: default(T) будет означать неинициализированное, прописанное нулями значение, а конструктор сможет выполнить добавочную инициализацию.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *