The question mark (or an asterisk or a sequence of characters enclosed in
square brackets) will only be changed by the shell's glob processing when
the full string in which it appears can be replaced by the name of an
existing entity in the file system (and one that can be referred to
relative to the current directory, whenever the argument string does not
start with a slash).

If the shell is set to reject glob patterns that don't match an existing
file system entity, then you'll get an explicit error from the shell. If
not, the unaltered pattern will be passed on as an argument to the
program.

So in cases like this, the likelihood that such an argument will be
altered silently by shell glob processing is exceedingly remote.