Compiler can optimize for size well which probably doesn't make any sense any more, because there's always enough room for code. Although I can bet that you can get the code generated by the compiler and make it smaller.
Compilers are very bad when they optimize for speed because they have no idea how the code is going to be used, which parts need to be fast and which are not, what's important and what's not. Therefore, it's easy to beat the compiler manyfold if you want to speed something up. People use Assembler in such cases.
With the advent of C# and Java, you cannot really use Assembler any more. Therefore many modern software programs run very slow even on modern PCs, sometimes slower than their C counterparts could run on older computers. If I wanted something really fast, such as mining BitCoins (which I don't do), I would write most of the code in Assembler.
BTW: GNU C, in particular, is not very good at optimizing the code. Pascal compiler in Delphi produces better code than GNU C, but nobody uses it
Now, back to the topic. C++ is a misapproprated language. It doesn't add much to C for "low level" programming. And it falls behind Java in OOP.
I think the reason C++ is used so much is because it is perceived to be cool. You want to hire a programmer, you go to the hiring agent and ask how to do that. The hiring agnet says that all good programmers use C++, so you decide to print an ad requiring C++ experience, 3 years or better 5 years. Job seekers see these ads and start studying C++ to get the necessary experience. Consequently they teach C++ in college instead of C, which is perceived to be obsolete etc.