By default, qaac produces m4a for AAC and ALAC. If you don't specify output filename by -o, output filename is automatically generated from input filename.
When you are encoding into AAC, you can optionally specify --adts to create ADTS file instead of m4a. ADTS is not a convenient format for storing songs since it cannot store tags and seeking is inefficient. However, it is a streamable format, and you can output to stdout in case of ADTS.
When you specify decoding mode with -D, WAV file is created. stdout is also usable for WAV output.
When encoding to m4a, you can optionally specify --no-optimize option. By default (without --no-optimize), qaac works like the following:
foo.wav -----> temporary file ------> foo.m4a
This "optimization" does the same as "Optimize MP4 layout" of foobar2000 context menu command. It re-layout the MP4 container.
Finally, for any of AAC, ALAC, and PCM, you can output to CAF (Core Audio Format) by --caf switch. This can be sometimes useful when used with -D(PCM output), since qaac writes tags to CAF file but does not writes for WAV file. CAF file allows stdout output in case of PCM.