素朴な疑問なんですが、

拡張子を".h"ではなく、".hpp"にする時はどういう時なんでしょうか?
C++のクラスファイルか何かでしょうか?

あと、よく関数とか構造体で、_func()や、struct _st { ... };
と、アンダーバーがついてるものがありますが、これらはどういう基準で付けるものなんでしょうか?