??! is a trigraph that translates to |. So it says:

if(a || b){  
...
}else{
...
}

So, what is digraphs and trigraphs?

In computer programming, digraphs and trigraphs are sequences of two and three characters, respectively, that appear in source code and, according to a programming language specification, should be treated as if they were single characters.

Various reasons exist for using digraphs and trigraphs: keyboards may not have keys to cover the entire character set of the language, input of special characters may be difficult, text editors may reserve some characters for special use and so on.

Click here to learn more about C and C++