Используя java, вы можете сделать то же самое, что и ответ C #:
public class Cheat {
public static final int x = (1000 *1001/2);
}
javac -Xprint Cheat.java
public class Cheat {
public Cheat();
public static final int x = 500500;
}
вы можете сделать это в scala с использованием чисел peano , потому что вы можете заставить компилятор выполнять рекурсию, но я не думаю, что вы можете сделать то же самое в c # / java
другое решение, не использующее -Xprint, но еще более хитрое
public class Cheat {
public static final int x = 5/(1000 *1001/2 - 500500);
}
javac -Xlint:all Cheat.java
Cheat.java:2: warning: [divzero] division by zero
public static final int x = 5/(1000 *1001/2 - 500500);
^
1 warning
без использования флагов компилятора. так как вы можете проверить произвольное количество констант (не только 500500), это решение должно быть приемлемым.
public class Cheat {
public static final short max = (Short.MAX_VALUE - 500500) + 1001*1000/2;
public static final short overflow = (Short.MAX_VALUE - 500500 + 1) + 1001*1000/2;
}
Cheat.java:3: error: possible loss of precision
public static final short overflow = (Short.MAX_VALUE - 500500 + 1) + 1001*1000/2;
^
required: short
found: int
1 error