Что в спецификации C# препятствует использованию ulong в бинарных операторах с плавающей запятой? ⇐ C#
Что в спецификации C# препятствует использованию ulong в бинарных операторах с плавающей запятой?
Это непонятный вопрос для любителей языка C#.
Правила продвижения числовых значений для бинарных операторов перечислены здесь, и в них особо упоминается, что оператор для ulong и знакового целочисленного типа завершится ошибкой привязки.
Однако этот раздел также помечен как «Этот подраздел носит информативный характер». и насколько я понимаю, эти правила являются побочным эффектом обработки встроенных перегрузок операторов с использованием того же механизма разрешения перегрузок, который используется для разрешения вызовов методов.
Если это так, то что мешает бинарному оператору, скажем, ulong+int повыситься до float+float< /code> поскольку для обоих существует неявное приведение типов?
Например: вызов fn(float,float) возможен с помощью fn(intArg,ulongArg) – почему бы не использовать оператор?
Другими словами, какая «неинформативная» часть спецификации охватывает это правило? Может быть, в списке встроенных операторов есть что-то, обеспечивающее соблюдение этого правила, о чем я не знаю?
Думаю, я нашел подсказку в описании встроенных операторов, где целочисленные операторы, операторы с плавающей запятой и десятичные операторы перечислены и сгруппированы отдельно.
Это намекает на то, что набор возможных операторов основан на том, является ли операнд плавающей запятой или десятичным... но я не вижу, чтобы это где-либо явно упоминалось. В разделе «Разрешение перегрузки двоичных операторов» говорится только о том, что для встроенных операторов:
В противном случае предопределенные реализации бинарного оператора «op», включая их поднятые формы, станут набором операторов-кандидатов для операции. Предопределенные реализации данного оператора указаны в описании оператора.
Это непонятный вопрос для любителей языка C#.
Правила продвижения числовых значений для бинарных операторов перечислены здесь, и в них особо упоминается, что оператор для ulong и знакового целочисленного типа завершится ошибкой привязки.
Однако этот раздел также помечен как «Этот подраздел носит информативный характер». и насколько я понимаю, эти правила являются побочным эффектом обработки встроенных перегрузок операторов с использованием того же механизма разрешения перегрузок, который используется для разрешения вызовов методов.
Если это так, то что мешает бинарному оператору, скажем, ulong+int повыситься до float+float< /code> поскольку для обоих существует неявное приведение типов?
Например: вызов fn(float,float) возможен с помощью fn(intArg,ulongArg) – почему бы не использовать оператор?
Другими словами, какая «неинформативная» часть спецификации охватывает это правило? Может быть, в списке встроенных операторов есть что-то, обеспечивающее соблюдение этого правила, о чем я не знаю?
Думаю, я нашел подсказку в описании встроенных операторов, где целочисленные операторы, операторы с плавающей запятой и десятичные операторы перечислены и сгруппированы отдельно.
Это намекает на то, что набор возможных операторов основан на том, является ли операнд плавающей запятой или десятичным... но я не вижу, чтобы это где-либо явно упоминалось. В разделе «Разрешение перегрузки двоичных операторов» говорится только о том, что для встроенных операторов:
В противном случае предопределенные реализации бинарного оператора «op», включая их поднятые формы, станут набором операторов-кандидатов для операции. Предопределенные реализации данного оператора указаны в описании оператора.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Overflow-x: скрыто, не препятствует горизонтальной прокрутке в реализации гамбургер-меню
Anonymous » » в форуме CSS - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-