eval-when-compile と eval-and-compile の使い分けは以下の認識であってますでしょうか?

前提) コンパイル時に素の require は実行されない。

・eval-when-compile
通常ロード時は他とかわらず普通に eval される。
バイトコンパイル時は eval した結果に置き換わり元の式の形では残らない。
→事前に複雑な定数式の計算をさせたり、
コンパイル時に置き換えてしまって残したくない内部的なマクロ定義をしたり、
コンパイル時に必要な定数値や関数定義をロードするのに使う。

・eval-and-compile
通常ロード時は他とかわらず普通に eval される。
バイトコンパイル時に eval されるが、コンパイル結果は元の式のまま残る。
→コンパイル時/実行時共に必要な定数値や関数定義をロードするのに使う。