I see what you mean. I was under the false impression that C# was more
"expressive" than C++, but here you said the opposite. Do you mean C++
is more powerful being slightly more low level? Can I access pointers
in C++ even if I am using managed code?
Yes C++ is more powerful being more low-level, but my point was it's
also more powerful because it has "advanced" things like templates and
RAII that allow you to code more succinctly and expressively; "smarter"
rather than "faster" if you like. By contrast I can't think of a single
feature of C# that could be considered as making it more expressive
than C++.
Wrt pointers in managed code, you can do certain things in both managed
C++ and C#, but this is necessarily constrained by the runtime.
Ok I like the idea of the combo. Speaking of speed, how does C++
"unmanaged" compares with C for mathematical crunching?
Endless debate about this; but there should be no difference if you use
C++-as-a-better-C, and even pure C++ mechanisms like polymorphism and
exceptions in reality only add a tiny overhead.
Why is this the case. Is it because Microsoft pushes more C#, because
the language is easier than C++ or for some other reason?
Historically - ie in the DNA days - using C++ for UI development and
indeed for COM development was not for the fainthearted, and most of
the time VB6 did an adequate job. This "fear of C++" has continued into
the .NET world, and the original "C++ with managed extensions" that M$
brought out did nothing to alleviate this. C++/CLI solves most of the
problems, but it's too late, C# has become established. And to be fair
C# is still easier than C++ for your average Joe developer.
It's also worth noting that in their eagerness to market C#, M$ spread
their own fog of FUD over C++. For example a lot of rubbish was/is
talked about the alleged "superiority" of generics over templates, some
of which could be read on MSDN.