оператор преобразования как автономная функция

Замечание об использовании значения pk объекта «экземпляр». Согласно документации:

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

Следовательно, справедливость использования pk зависит от того, как определена ваша конкретная модель.

25
задан Georg Fritzsche 31 January 2010 в 13:35
поделиться

4 ответа

Windows не поставляется с утилитой grep (на самом деле в ней есть findstr , но это не совсем то же самое), поэтому необходимо установить что-то вроде cygwin или unix utils для windows . После установки их необходимо добавить в % PATH% , чтобы окна знали, где их искать. Это можно сделать либо в командной строке, запустив cmd.exe и введя команду наборов PATH = < your _ path >;% PATH% , либо в каком-либо окне параметров настройки, которое можно получить, щелкнув правой кнопкой мыши значок Мой компьютер (например, переменные среды здесь являются его картинный).

Обратите внимание, что в окнах имеется утилита find , а также в системе % PATH% , которая может привести к неправильной работе определенных команд (например, M-x grep-find ), поэтому важно сначала поместить unix-find в % PATH% .

-121--3375319-

Поскольку абстрактные классы имеют состояние (поля) и что-то, их нужно как-то инициализировать.

-121--997853-

Одна из причин, о которой я могу думать, заключается в том, чтобы предотвратить неявные преобразования, применяемые к отливаемой вещи. В вашем примере, если вы сказали:

 bool( "foo" );

, тогда «foo» будет неявно преобразован в последовательность, которая затем будет иметь явное логическое преобразование, которое вы предоставили к нему.

Это невозможно, если оператор bool является функцией члена, поскольку неявные преобразования не применяются к * этому . Это значительно уменьшает возможности неоднозначности - неоднозначности, обычно рассматриваемые как «плохая вещь».

9
ответ дан 28 November 2019 в 22:02
поделиться

Сохраняя оператор преобразования внутри класса, вы даете автору класса контроль над тем, как он может быть преобразован (он не позволяет пользователям создавать неявных преобразований). Как разработчик, я бы счел это преимуществом, так как неявное преобразование имеет свои проблемы

. Разница заключается в том, что можно передавать один объект как другой и проходить через преобразование. функция. Первый сообщает, что объект имеет данный тип, а второй показывает новым читателям, что между этими двумя типами есть разница, и что преобразование необходимо.

0
ответ дан Community 16 October 2019 в 07:21
поделиться

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

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

-3
ответ дан sbi 16 October 2019 в 07:21
поделиться

Существует группа операторов, которые должны быть перегружены как нестатические функции элементов: назначение, подписка, вызов функции, доступ класса, функции преобразования.

Я думаю, что Комитет Стандарта или Strourstrup просто чувствовал, что это может быть слишком запутанно, если бы ему было разрешено вводить эти особые поведения к занятиям извне.


Я полагаю, лучший способ получить ответ, чтобы по электронной почте автор.

-2
ответ дан 28 November 2019 в 22:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: