- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 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 # 0
inkanus-gray # 0 ⇈
gost # 0
bormand # 0 ⇈
А он его и не знает. Это ж не хаскель.
3_dar # 0 ⇈
kegdan # 0 ⇈
inkanus-gray # 0 ⇈
kegdan # 0 ⇈
инт предпочтительней, это нужно знать
guest # 0 ⇈
kegdan # 0 ⇈
inkanus-gray # 0 ⇈
Чтобы уж наверняка.
kegdan # 0 ⇈
inkanus-gray # 0 ⇈
https://ideone.com/cV2tT2
https://ideone.com/PPjziK
Если пнуть, то он и float+float, и double+double выдаёт.
kegdan # 0 ⇈
https://ideone.com/8iRyyl
1024-- # 0 ⇈
inkanus-gray # 0 ⇈
Вычисление слева направо в типе наименьшего диапазона.
В третьем выражении первые два слагаемых будут интами и только для добавления «плавающего» слагаемого их сумма переведётся во float.
inkanus-gray # 0 ⇈
inkanus-gray # 0 ⇈
Например, в перечисленных языках при сложении двух интов легко поймать переполнение (даже если в левой части «длинный» тип), если не вставить у одного из слагаемых явный каст в длинный инт.
И тут, как я понял, перебор начинается с типов минимально возможного диапазона. Можно уложиться в инт — считаем в инте, и только оператор присвоения будет приводить результат к лонгу.
guest # 0 ⇈
gost # 0
А вот заботливые кресты спасают программиста от неоднозначностей. Какой юзер-френдли язык!
guest # 0 ⇈
barop # 0 ⇈
3_14dar # 0
Штоэта?
guesto # 0 ⇈
забей в общем
Dummy00001 # 0 ⇈
> Штоэта?
"long operator" это программерский слэнг для пениса. остальное сам догадаешься (например "public" это таг для эксгибиционизма).
kegdan # 0 ⇈
bormand # 0 ⇈
kegdan # 0 ⇈
inkanus-gray # 0 ⇈
signed long long int
unsigned long long int
long double
В сишке можно добавить long к некоторым имеющимся типам, включая long (int).
Кстати, а long long long int и long long double бывают?
kegdan # 0 ⇈
bormand # 0 ⇈
kegdan # 0 ⇈
bormand # 0 ⇈
kegdan # 0 ⇈
старая шутейка от gcc
bormand # 0 ⇈
kegdan # 0 ⇈
inkanus-gray # 0 ⇈
kegdan # 0 ⇈
bormand # 0
kegdan # 0 ⇈
(long) new MyClass()
Иначе пошлет из-за несовместимости типов
bormand # 0 ⇈
kegdan # 0 ⇈
bormand # 0 ⇈
kegdan # 0 ⇈
Я бы просто слово explicit выкинул
bormand # 0 ⇈
kegdan # 0 ⇈
А конструкторы бывают статичными
bormand # 0 ⇈
kegdan # 0 ⇈