Нет, нет constexepr
условного оператора. Но вы можете обернуть все это в лямбду и сразу же оценить ее ( IIFE ):
template
class BusAddress {
public:
explicit constexpr BusAddress(Address device)
: mAddress([&]{
if constexpr (Mode::write) {
return device.mDevice << 1;
}
else {
return (device.mDevice << 1) | 0x01;
}
}())
{ }
private:
uint8_t mAddress = 0;
};
Возможно, это не самый сексуальный код, но он выполняет свою работу. Обратите внимание, что лямбды по умолчанию constexpr
, где это возможно, начиная с N4487 и P0170 .
Существует Runtime.maxMemory
, который, как сказано в документации, возвращает максимальный объем памяти, который виртуальная машина Java попытается использовать, но не указано, является ли это максимальная куча. памяти, установленной при запуске JVM.
В качестве теста я написал следующую программу:
class MaxMemory {
public static void main(String[] args) {
System.out.println(Runtime.getRuntime().maxMemory());
}
}
Результаты выполнения были следующими:
C:\coobird\>java -Xmx64m MaxMemory
66650112
C:\coobird\>java -Xmx128m MaxMemory
133234688
Это используется Java SE 6 версии 1.6.0_12 в Windows.
Хотя значения близки к 64 МБ (67 108 864 байта) и 128 МБ (134 217 728 байтов), это не совсем так.