this post was submitted on 03 May 2024
242 points (94.2% liked)

Programmer Humor

32410 readers
1 users here now

Post funny things about programming here! (Or just rant about your favourite programming language.)

Rules:

founded 6 years ago
MODERATORS
 

Alt text:

Image that says:

HOLY SHIT!! IS THAT A MOTHERF*CKING C++ REFERENCE???

int& a = b;

you are viewing a single comment's thread
view the rest of the comments
[–] Zagorath@aussie.zone 28 points 1 year ago* (last edited 1 year ago) (5 children)

I've used C but never C++. What does it mean for a variable's type to be int&? From when I've used it, & would be used to create a pointer to a variable, but the type of that pointer would be int*.

edit:

never mind, I looked it up. It's a "reference" instead of a pointer. Similar, but unlike a pointer it doesn't create a distinct variable in memory of its own.

[–] TheEntity@lemmy.world 5 points 1 year ago (3 children)

never mind, I looked it up. It’s a “reference” instead of a pointer. Similar, but unlike a pointer it doesn’t create a distinct variable in memory of its own.

I'm almost sure it does create a distinct variable in memory. Internally it's still a pointer, specifically a const pointer (not to be confused with a pointer to a const value; it's the address that does not change). Think about it as a pointer that is only ever dereferenced and never used as a pointer. So yes, like the other commenter said, like an alias.

[–] Sonotsugipaa@lemmy.dbzer0.com 3 points 1 year ago (2 children)

I don't think references are variables: you can't modify them, and AFAIR you can't have pointers to them, with the possible but unlikely exception of non-static member references.

[–] firelizzard@programming.dev 4 points 1 year ago

For references within a scope, you’re probably right. For references that cross scope boundaries (i.e. function parameters), they necessarily must consume memory (or a register). Passing a parameter to a function call consumes memory or a register by definition. If a function call is inlined, that means its instructions are copy-pasted to the call location so there’s no actual call in the compiled code.

load more comments (1 replies)
load more comments (1 replies)
load more comments (2 replies)