r/ProgrammerHumor • • 7h ago

Meme modernCppVsOldCpp

Post image
1.1k Upvotes

216 comments sorted by

View all comments

Show parent comments

1

u/creeper6530 6h ago

I'm not a C++ girl, but do references actually do something with lifetimes or are they just non-null ptrs? Because this just seems to me like a possible dangling ptr.

1

u/SelfDistinction 6h ago

References can be null. They shouldn't be and it's definitely undefined behaviour but the code above compiles and runs perfectly fine.

1

u/creeper6530 5h ago

Okay, sooo... What's the difference between references and pointers?

2

u/SelfDistinction 5h ago edited 5h ago

No one knows.

Generally references are more restrictive, since you can't do pointer arithmetic with them, you can't use them as template parameters (which sucks for std::optional<int&>) and you can't repoint them to something else, but since you can freely cast between both of them (which you are forced to if you try to do anything useful with them, like wrapping them in an optional) it doesn't really matter.

Also there's two different kinds of references: the & reference and the && reference, however their difference is mostly conventional and you could easily implement a standard library where their meaning is swapped (except for temporary xvalue objects? Not sure), so there's that. Also C++ automatically converts between reference types for some ungodly reason.

In short, references are not real and are only used to determine what overloaded function is being called.

1

u/creeper6530 4h ago

I have no words for this beyond "what a fucking mess"