Choosing the right language for the project is like selecting a president. You have to understand that you are not able to change your mind whenever you want to and have to deal with consequences of your choice for a significant amount of time. Sometimes you already know the answer, since a language of choice has to be compatible with certain libraries and applications. However, there are cases when you cannot tell for sure what language is better to use, especially if you have already excluded Java, for example, and have to choose between C++ and C#. It is not that easy, since they are similar at the core. The very fact that C# is more popular now for desktop and web applications does not mean you have to opt for it. You should focus on their differences and compare them based on your project’s requirements.
1. The speed of software development
With C#, you can get a product prototype faster. The speed of software development on # is much higher in the early stages of a project when comparing to C++. However, when the project infrastructure has been created, you have collected libraries and decided on approaches, C++ gives you the same speed. With that in mind, we can conclude that C# is preferable for small low-budget projects. But if you work on a bigger project, C#'s advantage in speed is not significant.
2. Cross-platform applications
C++ applications are cross-platform if we do not take into account additional expenses and binary incompatibility between different platforms. On the other hand, with C# you cannot create cross-platform code despite existing unofficial .NET implementations for non-Windows environments and potential binary compatibility. Meanwhile, C++ is great for creating cross-platform apps; there are a lot of C++ libraries that are either compiled or can be compiled for any existing platform.
3. Code performance
It is obvious that unmanaged C++ code can be optimized more easily than the managed one written in C#. It can be concluded that C++ would be the first choice for difficult tasks where a large amount of data is proceeded, since it provides you with a possibility to solve any issues with less resource requirements. That results in a higher performance level. Of course, we should not forget that a wrong approach can nullify C++ code advantages and make it work slower comparing to C# code written for the same task.
4. Resource requirements
In general, it is easier to create a nice, efficient and concise piece of code in C#. However, it does not mean that C++ code is always cumbersome. You just need to be more creative while writing the latter. And it often pays off, since with it you can be more flexible and have a direct access to the memory. It means you can break the hurdles on your way to higher performance and also create applications that run equally well on old and new computers. It is very important, since hardware is not upgrading as quickly as we would like it to. That is why we have to focus on optimizing applications in such a way so the system requirements do not scare off potential users. I personally do not want to buy a new laptop every year just to get a slightly upgrade in CPU and RAM. It must be enough to give my Mac a little tune-up, add some memory and that is it for the next 3 years or more. I am sure that the vast majority of people are also not willing to overinvest.
5. Code debugging
That is where C# runs the show. Code debugging is much easier with it, and you can say no to annoying errors caused by #defines. Moreover, C# IDEs support automatic refactoring, which definitely makes our life easier. Besides, Visual C# also underlines syntax and semantic errors the moment you make them.
6. Language and syntax
At first glance, C++ and C# code look similar. However, C++ is C, C++ and C++0x at the same time, while C# is just C#. Since the latter is like a simplified version of C++, it has its own weak and strong points. For instance, C# code looks more concise, but it lacks const methods and global functions.
7. Cost of support
There is no big difference in supporting C++ and C# applications. It is cheaper to refactor C# applications, but in the same time, bugs in C# code are more difficult to get rid of, so they cost you more.
C++ is more universal, and thus, less risky to use, since it does not require from you to stick to the Windows environment. Moreover, this programming language gives less chance for the bad code - it will hardly "survive" to cause unexpected problems in the future.
As we can see, it is impossible to decide on what language is better or worse. It depends on a project. Generally speaking, C++ is your choice if you develop applications that will be used for scientific research, for example, while C# is good for business apps.
I also assume that C++ will soon become as popular as C#, since it can extend applications' "lifespan" and make them more universal from the beginning.