>>594
> int DoSomething( Output& out , Input& in = Input::Null() );
こっちのNullは、その場で生成してその場で消滅する、
「テンポラリオブジェクト」もしくは「一時オブジェクト」ってやつ。

> Input::Null dummy;
> DoSomething( out , dummy );
こっちのNullは、dummyという「名前つきオブジェクト」。

どちらも人間の感覚では一時的なオブジェクトとして
違いはなさそうに思えるけど、これがコンパイラにとっては
大きな違いになるらしい。テンポラリオブジェクトの方が
最適化されやすかったりするし。
詳しいことは、 More Effective C++ の項目19,20あたりを読んで
勉強しましょう。