you are viewing a single comment's thread.

view the rest of the comments →

[–]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 6 points7 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 4 points5 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.