@Poster, Nothing about C# smells of Web technology. it is a full fledged programming language that can do everything you can think of doing with Java or C++, so whichever you choose, you are on the right track but note that since C# is built on C technology, it combines all the power of C++ and much more. If .NET is your thing, there is Visual C++ .NET for you to take advantage of . But C++ remains with better performance level and that is still in use. Below is a sort of list of pros for each , Check it out
http://www.thinkingparallel.com/2007/03/06/c-vs-c-a-checklist-from-a-c-programmers-point-of-view/Pro C#:garbage collection
array bounds checking
huge .NET-Framework library
types have a defined size (e.g. a long is 64Bit)
strings are encoded in UTF/16
autoboxing - every type can be treated as if it inherits from object
supports constructor-chaining (one constructor can call another constructor from the same class)
when a virtual method is called in a constructor, the method in the most derived class is used
static constructors (run before the first instance of the class is created)
exceptions have access to a stack trace
advanced runtime type information and reflection
supports variadic functions nicely
built-in support for threads
no need for header files and #includes
no fall-through on switch-statements
arithmetic operations can be checked for overflow if required
objects must have a definite value before being used
attributes can be attached to classes and retrieved at runtime
no forward declarations required, classes can be arranged at will
access to class members / functions is done only by the dot (no more -> or
conditional functions (e.g. for debugging)
structs and classes are actually different (structs are value types, have no default constructor in general cannot be derived from)
supports properties
readonly members are const, but can be changed in the constructor
finally block for exceptions
arrays are objects
support for anonymous functions
supports the base keyword for calling the overridden base class
Pro C++better performance
portability
multiple inheritance
deterministic destruction (allows RAII)
any type can be thrown as exception (only classes derived from System.Exception in C#)
ability to enforce const-correctness
implicit interfaces on generics (in C#, generics must be constrained with an interface)
offers pointers (C# only offers pointers in unsafe mode)
support for macros
support for global variables, functions, constants
allows default arguments on function parameters
STL
supports bitfields
Where C# is just different from C++value types and reference types exist (struct is value-type, class is reference-type)
value types live on the stack, reference types on the heap
references can point to null (must not be valid)
code is packaged in assemblies in C#
no automatic conversion from int to bool in C#
main-function is called Main in C#
no semicolon after a class declaration in C#
everything derives from object or can be treated as if