So hey all. I wanted to join a C++ forum community, and I decided upon this one. I've come from Java and VB.NET, and a tad bit of some other web development stuff and some Python.
First of all: Well Done! You've chosen one of the greatest programming languages ever created! Initially, you'll find C++ a little overwhelming, but once you know the language's possibilities, that won't even matter.
Nevertheless, welcome to the board!
Wazzak
___________________________
Some people, such as Vlad, will recommend C# before C++. Personally, I'm not cruel enough to suggest such a thing, so I would definitely say stick with C++. If you choose C# you'll be greatly disappointed. Granted, C# will help you to understand C++ in terms of OOP; but that's about it.
@Chrisname: This has some interesting points: http://www.curly-brace.com/favorite.html and so does this: http://bridgingthemoat.blogspot.co.uk/2011/01/why-c-is-bad-for-business.html
#1 has some good points, and a bunch of "points" that I just don't care about.
1 and 2 aren't that big of a deal to me (and they're really the same problem - object deletion is non-deterministic) because I've never had a problem with it and it looks easy to work around.
3. I don't see what the problem is. Functions have to be methods. Deal with it. It is literally completely inconsequential. Put your methods in a static class if you don't want to make objects. He says "Hurr I can't tell the difference between a namespace and a class in C#!" but he just said that functions can't appear outside of classes, so if you're calling a function from it, it's obviously a class! Or os he talking about using the . notation for accessing namespace, static class and object members? Because C++ uses :: for static classes and namespaces, so what's his point?
4. Again, I don't see the problem. He even admits other languages do it, too. Moot point.
5. I'll cede that it's bad default behaviour, but it really wouldn't matter if you actually learned the language, and just didn't use operator== on non-value types that don't overload it (which you can easily find out if you RTFM(SDN)).
6. I'll give him this one, with the caveat that I'm pretty sure you can get around the limitation by making the overloaded operators into extension methods (by adding the this keyword before the parameters IIRC).
7. Most languages mess up when you try to do something with an uninitialised variable. Moot point.
These are all things that could be improved; they aren't good reasons not to use the language.
#2 is utterly pathetic, I'm half-inclined to believe it's trolling.
1. The very first thing he says is that C# is patent encumbered, and then he admits Java is too.
2. He says .Net is slower than Java and then shows a benchmark comparing Java to Mono. Also software benchmarks are generally completely irrelevant. The site he links to even admits "These are just ten tiny examples".
3. Who cares if it keeps changing? And yes it will stick around. Moot point.
[edit: I was distracted by writing, and now I've gone and missed the end of the world. Thanks a lot Framework!]
And in the curly-brace article the first paragraph is a disclaimer which states :
Disclaimer: Quite some time has passed since I started writing this page. At the time, .NET was at 2.0 and it has been pointed out to me that some of my concerns have been addressed in later versions of the language. Thanks to Nelson LaQuet for an extensive critique.
1 and 2 aren't that big of a deal to me (and they're really the same problem - object deletion is non-deterministic) because I've never had a problem with it and it looks easy to work around.
Yes, object deletion is non-deterministic, but reference values are not supposed to be. When you write
1 2 3 4
{
T o=new T();
//...
}
it's reasonable to assume that o will not suddenly decide to point to something else unless you tell it to. Yes, once o drops the pointer and nothing else owns the T, the environment is free to do with it whatever and whenever it wants. But not while o is still around.
It's like one of those jokes where newbie programmers do stuff like a=a to make sure the variable [i]really[i] gets set.
I see that, but I've never encountered this problem, which, judging by naraku9333's quote, is because it was fixed. I think MS were already on .Net version 3.5 when I learned C#. I'll concede that it would have been a problem at the time (but still possibly not a dealbreaker), but it's a moot point now.
Poor new guy, here is just introducing him/herself and we've detailed the thread into a language debate :( Don't worry OP this doesn't always happen. It's just with programmers, languages debates happen often haha.