int f {};      // initializer is empty braces (value initialization)

value will be set to 0 when this happens. this is zero initialization

manually setting 0 vs {}

int x {0};
int x{};

above does the same thing

Use explicit zero initialization when you are actually using zero. Use Value initialization when the value is temporary and will be replaced.