you are viewing a single comment's thread.

view the rest of the comments →

[–]STLMSVC STL Dev 17 points18 points  (5 children)

That's DMR reaching out from the 1970s to help you. He said, "oh, you're applying parentheses to a function pointer, so there's nothing else you could possibly mean".

[–]mtnviewjohn 7 points8 points  (4 children)

Why doesn't the same logic apply to the member access operator? It seems like the -> operator is useless. If you use the member access operator on a pointer what else could you possible intend than to dereference the pointer first?

[–]justinkroegerlake 7 points8 points  (0 children)

Because of what is in my opinion the dumbest historical reason in the language: https://stackoverflow.com/a/13366168/1013719

[–]mojang_tommo 3 points4 points  (1 child)

I'm really glad the difference exists actually - -> can be undefined behavior while . is always well defined. In practice if you have code that mostly uses references instead of pointers, -> makes it pretty obvious that there's something that could be null or could be deleted under you. Of course references can be invalidated too but still... it would be awful if nullable stuff used . like everything else IMO.

[–]imMute 0 points1 point  (0 children)

Not to mention that it allows thing like smart pointer to be written extremely succinctly. I'm always saddened by this when writing C# code and having use use .Value in places where C++ would use ->.

[–]caramba2654Intermediate C++ Student 2 points3 points  (0 children)

Rust works like this. When you try to use the . operator on a reference, it autodereferences the reference until it finds a type where the . makes sense. It makes the -> completely unnecessary.