Does 'ref' turn into a pointer during compile time?

Ali Çehreli acehreli at yahoo.com
Thu Dec 22 03:17:26 UTC 2022


On 12/21/22 16:43, thebluepandabear wrote:
 > Say you have the following function that takes in a `ref` parameter:
 >
 > ```D
 > void modify(ref int num) {
 >      num += 5;
 > }
 > ```
 >
 > Does the compiler turn that into the code below?
 >
 > ```D
 > void modify(int* num) {
 >      num += 5;

Rather:

   *num += 5;

 > }
 > ```
 >
 > I was just wondering whether or not this is the case because I don't
 > think this was touched in the book about D I am reading.

Yes, references are realized by pointers by CPUs; so that's how the code 
is compiled as well.

Pointers are considered to be one of the most difficult concepts for 
beginners (who the book was supposed to target). That's why I tried to 
hold it off as much as possible. I think once the concept of a reference 
is understood, pointers should be easy to understand.

That's why I say "Behind the scenes, D's higher-level concepts (class 
variables, slices, associative arrays, etc.) are all implemented by 
pointers." only later in the book on the pointers page:

   http://ddili.org/ders/d.en/pointers.html

Ali



More information about the Digitalmars-d-learn mailing list