Does it [Visual C++] do C and C++, and are there different compilers for each?
There's one compiler (or at least a single front-end program) that does both C and C++ (but contrary to what some believe, it runs in a separate mode for C, where it will reject constructs specific to C++).
Is there any way to develop code that will be run un-managed in Visual C++ or will anything developed in Visual C++ run need .NET to run? Does managed vs. un-managed come down to the compiler used?
Yes, native code developed in C or C++ can/will run without .NET. There is a sort of hybrid (C++/CLI) that's sort of like C++ but what it produces requires .NET to run. I wouldn't spend a lot of time/effort worrying about it though -- in fact, I'd generally ignore its existence completely.
If running writing and running managed Visual C++ code, is there anything I can do in VC++ that I couldn't do in C#?
Yes and no. C++/CLI makes interop with native code quite a bit simpler than trying to use it directly from C# -- and that's essentially the only situation in which I'd recommend using it (and at least the last time I looked, that was pretty much what MS recommended as well).
Other than learning for its own sake (which is great) would I gain any insight by learning VC++ and if so, where should I start?
Do you mean learning real C++, or Microsoft's C++/CLI thing? As pointed out above, C++/CLI is neither fish nor fowl, and I'd generally avoid it.
Real C++ is rather a different story. There are quite a few reasons to use it:
- Templates: find out what C# "generics" do a poor job of imitating.
- Native code: can help speed, eliminates dependency on .NET.
- Some (but, not all) of the standard library is much better designed.
- Saving the best for last: RAII manages all kinds of resources, where GC only manages memory.
Personally, I think you're concentrating far too much on "one compiler" vs. "two compilers" -- it's a nearly meaningless distinction. The real question isn't how many compilers are involved, or which one produces what code, but how to accomplish what you want -- and at least if you're working inside of VS, it'll generally sort out things like which compiler to invoke for a particular piece of source code.
Let this be seen as a sales pitch (or something similar) I feel obliged to point out that C++ isn't all wonder and light compared to C#. Just for example, C++ doesn't really support reflection, which makes some things much clumsier than in C#. Some other areas (e.g., template meta-programming) are possible, but can be hard to understand and often involve truly hideous syntax. Then there's the simple fact that compile times are almost always quite a bit slower with C++ than C#.