Why is this an issue?

The form $i` creates a temporary variable whereas `$i does not. It saves CPU cycles.

Examples

Noncompliant

i++ // Noncompliant

Compliant

++i

Exception

In some cases, it may be intentional to allow the use of i++, even if it is probably not far from a code smell. Examples:

void bar(int value) {
    // ...
}

int foo() {
    int i = 0;
    bar(i++);
    return i;
}

or

private int i = 0;
int foo() {
    return this.i++;
}
---