The problem, when designing a computer language, is that things that become real easy in an interpreted language (such as Byte-code) can be REALLY difficult in a machine-language compiled language. The way that a language is designed will often determine if it's going to compile directly to machine language or not - the key here is to "make it machine language friendly". One of the keys here is "polymorphic variables" - that is, variables that are integer, string or float depending on their input value and usage. That essentially requires some sort of overhead in the compiled form. In an interpreted form, the digging out of a variable value is not machine-language directly, so it will have some overhead anyways. I picked the topic of polymorphic variables because that's usually one of the key points that people bring out that they "need" in C or C++, that other languages (such as PHP and python) allows them to use.
The other factor is of course that you can make your own high level language in C or C++ - that is, once you have a sufficient library of functions, you can re-use those functions as part of a high level functionality.
--
Mats