Re:Popular Myths about C++, Part 1
by mikeash on Tuesday December 09, 2014 @10:13AM
(#8723156)
The way most other languages handle it is that the list literal construct just creates a list, and if you want something else then you need to explicitly convert. For example, in Python:
There's nothing inherently wrong with C++'s initializer list approach. Nor is there anything inherently wrong with auto. But they collide in unfortunate ways because they haven't been designed such that they go well together. C++ is full of things like this. Responding with "well, that makes the most sense" for any given feature is missing the point entirely.
[ Parent
| on HN ]
> The way most other languages handle it is that the list literal construct just creates a list, and if you want something else then you need to explicitly convert. > For example, in Python:
> x = [1, 2, 3, 5, 8, 13] # this is a list of integers
> y = set([1, 2, 3, 5, 8, 13]) # this is a set of integers
Actually, that's not the best way to do it:
y = {1, 2, 3, 5, 8, 13} # this is a set of integers without creating a list first.
z = set(1, 2, 3, 5, 8, 13) # so is this
In C++ {} is syntactic sugar for "Create an initializer_list with these values," which is what happens when it's assigned to an "auto" variable. Not surprising at all. If you want a different type, you need to specify the type that you want.Maybe it's confusing to beginners and people who don't take the time to learn the language, but C++ isn't catering to those people.
Don't get me wrong, there are a lot of "gotchas" in C++, I just don't think the two you've posted are very bad.
Um, the whole point of this discussion is about the claim that C++ is a good language for beginners to learn.
I have problems with using C++ to build real projects with experienced programmers too, but those are mostly different problems.
Re:Popular Myths about C++, Part 1
by maxlybbert on Tuesday December 09, 2014 @10:50AM
(#8723381)
Well, to be fair, with "auto x = { 1, 2, 3, 4, 5, 6}" you will get a variable named "x", but it won't be a std::vector<int> (it'll be a std::initializerList<int>).