- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
using System;
public class Test
{
private static void Main(string[] args)
{
int d = 2147483647;
Console.WriteLine(d);
long g = 2147483647+d;
Console.WriteLine(g);
long k = new MyClass() + new MyClass();
Console.WriteLine(k);
}
public class MyClass
{
public static implicit operator int(MyClass m)
{
return 5;
}
public static implicit operator long(MyClass m)
{
return 100;
}
}
}
А он его и не знает. Это ж не хаскель.
инт предпочтительней, это нужно знать
Чтобы уж наверняка.
https://ideone.com/cV2tT2
https://ideone.com/PPjziK
Если пнуть, то он и float+float, и double+double выдаёт.
https://ideone.com/8iRyyl
Вычисление слева направо в типе наименьшего диапазона.
В третьем выражении первые два слагаемых будут интами и только для добавления «плавающего» слагаемого их сумма переведётся во float.
Например, в перечисленных языках при сложении двух интов легко поймать переполнение (даже если в левой части «длинный» тип), если не вставить у одного из слагаемых явный каст в длинный инт.
И тут, как я понял, перебор начинается с типов минимально возможного диапазона. Можно уложиться в инт — считаем в инте, и только оператор присвоения будет приводить результат к лонгу.
А вот заботливые кресты спасают программиста от неоднозначностей. Какой юзер-френдли язык!
Штоэта?
забей в общем
> Штоэта?
"long operator" это программерский слэнг для пениса. остальное сам догадаешься (например "public" это таг для эксгибиционизма).
signed long long int
unsigned long long int
long double
В сишке можно добавить long к некоторым имеющимся типам, включая long (int).
Кстати, а long long long int и long long double бывают?
старая шутейка от gcc
(long) new MyClass()
Иначе пошлет из-за несовместимости типов
Я бы просто слово explicit выкинул
А конструкторы бывают статичными