Historical and practical reasons. C++ is treacherous for low level stuff, and while I'm sure everyone would like to make a wild guess at what the compiler will do *this* time on *this* hardware and hope to get predictability, it's probably not a great idea.
This is from one interview (http://linuxgazette.net/issue32/rubini.html), but if you do some simple googling you can find many other places where this is discussed, and at much greater length. This is one of the more benign ones I found, I assume because he was being interviewed and not smacking down some C++ programmer. It gets old when they keep saying "well just don't use every single feature of c++ and then you won't have any problems!"
Alessandro: Many people ask why the kernel is written in C instead of C++. What is your point against using C++ in the kernel? What is the language you like best, excluding C?
<font color="navy"> Linus: C++ would have allowed us to use certain compiler features that I would have liked, and it was in fact used for a very short timeperiod just before releasing Linux-1.0. It turned out to not be very useful, and I don't think we'll ever end up trying that again, for a few reasons. </font>
<font color="navy"> One reason is that C++ simply is a lot more complicated, and the compiler often does things behind the back of the programmer that aren't at all obvious when looking at the code locally. Yes, you can avoid features like virtual classes and avoid these things, but the point is that C++ simply allows a lot that C doesn't allow, and that can make finding the problems later harder. </font>
<font color="navy"> Another reason was related to the above, namely compiler speed and stability. Because C++ is a more complex language, it also has a propensity for a lot more compiler bugs and compiles are usually slower. This can be considered a compiler implementation issue, but the basic complexity of C++ certainly is something that can be objectively considered to be harmful for kernel development. </font>