"Best" is a relative term. What are you looking for? High generated code quality? Support for obscure instruction sets? Options to not generate code using remotely obscure instruction sets? Cross-compilation ability? Quick compile times?
Even then, it's not a clear-cut "this compiler is better" answer, as that depends on situation to situation. Compilers are very complex pieces of code (at least the good ones are).
Generally, you can't go wrong with Microsoft's C++ compiler (although that one I have some gripes with due to it supporting anti-standard code), clang, or g++. Those are kind of like the big three.
alright let me rephrase. you cant do it with pure c++ using well established compilers such as gcc or vc++. there might be other reasons, but the only one i can think of off the top of my head is c++ cant handle the interrupts that come so you need assembly for that
if you want to make your own OS for x86/x64 use intel compiler or amd compiler.
@DTSCode - c++ is containing C - of course it can handle interrupts. In OS programming you only need to use assembler to set start address for the boot-loader.
C++ is not good for low-level OS programming because in bare metal CPU there is no newor deletekeywords - you need to implement them yourself to use dynamic allocation, etc.. Just use C for kernel and drivers then use cpp for higher levels.