- 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;
}
}
}
kegdan 30.04.2016 20:59 # 0
inkanus-gray 30.04.2016 21:09 # +3
gost 30.04.2016 21:38 # 0
bormand 30.04.2016 21:42 # 0
А он его и не знает. Это ж не хаскель.
3_dar 30.04.2016 22:03 # 0
kegdan 30.04.2016 22:07 # +1
inkanus-gray 30.04.2016 22:10 # 0
kegdan 30.04.2016 22:14 # +1
инт предпочтительней, это нужно знать
guest 25.04.2017 12:12 # 0
kegdan 30.04.2016 21:51 # +3
inkanus-gray 30.04.2016 22:07 # +1
Чтобы уж наверняка.
kegdan 30.04.2016 22:12 # +1
inkanus-gray 30.04.2016 22:19 # 0
https://ideone.com/cV2tT2
https://ideone.com/PPjziK
Если пнуть, то он и float+float, и double+double выдаёт.
kegdan 30.04.2016 22:27 # +1
https://ideone.com/8iRyyl
1024-- 30.04.2016 22:44 # +1
inkanus-gray 30.04.2016 23:25 # +1
Вычисление слева направо в типе наименьшего диапазона.
В третьем выражении первые два слагаемых будут интами и только для добавления «плавающего» слагаемого их сумма переведётся во float.
inkanus-gray 30.04.2016 23:26 # 0
inkanus-gray 30.04.2016 21:59 # 0
Например, в перечисленных языках при сложении двух интов легко поймать переполнение (даже если в левой части «длинный» тип), если не вставить у одного из слагаемых явный каст в длинный инт.
И тут, как я понял, перебор начинается с типов минимально возможного диапазона. Можно уложиться в инт — считаем в инте, и только оператор присвоения будет приводить результат к лонгу.
guest 25.04.2017 02:49 # 0
gost 30.04.2016 21:45 # +3
А вот заботливые кресты спасают программиста от неоднозначностей. Какой юзер-френдли язык!
guest 25.04.2017 01:10 # 0
barop 25.04.2017 01:14 # 0
3_14dar 01.05.2016 00:12 # −1
Штоэта?
guesto 01.05.2016 04:11 # +11
забей в общем
Dummy00001 02.05.2016 11:23 # +4
> Штоэта?
"long operator" это программерский слэнг для пениса. остальное сам догадаешься (например "public" это таг для эксгибиционизма).
kegdan 02.05.2016 11:24 # 0
bormand 02.05.2016 11:32 # +3
kegdan 02.05.2016 11:58 # 0
inkanus-gray 02.05.2016 14:39 # 0
signed long long int
unsigned long long int
long double
В сишке можно добавить long к некоторым имеющимся типам, включая long (int).
Кстати, а long long long int и long long double бывают?
kegdan 02.05.2016 14:40 # 0
bormand 02.05.2016 14:42 # +3
kegdan 02.05.2016 14:43 # 0
bormand 02.05.2016 14:45 # +1
kegdan 02.05.2016 14:45 # 0
старая шутейка от gcc
bormand 02.05.2016 14:49 # +6
kegdan 02.05.2016 14:52 # 0
inkanus-gray 02.05.2016 14:59 # 0
kegdan 02.05.2016 15:33 # +4
bormand 02.05.2016 12:14 # 0
kegdan 02.05.2016 12:21 # 0
(long) new MyClass()
Иначе пошлет из-за несовместимости типов
bormand 02.05.2016 12:24 # 0
kegdan 02.05.2016 12:32 # 0
bormand 02.05.2016 12:44 # +1
kegdan 02.05.2016 12:50 # +1
Я бы просто слово explicit выкинул
bormand 02.05.2016 12:58 # 0
kegdan 02.05.2016 13:00 # 0
А конструкторы бывают статичными
bormand 02.05.2016 13:35 # 0
kegdan 02.05.2016 13:37 # 0