On Wednesday, 11 August 2021 at 05:33:06 UTC, Tejas wrote:
On Tuesday, 10 August 2021 at 21:19:39 UTC, Bastiaan Veelo
wrote:
On Tuesday, 10 August 2021 at 16:00:37 UTC, Tejas wrote:
Basically, what are the subtle gotcha's in the differences
between C++ and D code that looks similar
The only gotcha that comes to my mind is that `private` means
private to the module in D, not private to the aggregate.
— Bastiaan.
A few others that I know:
When importing one module(say ```m2```) into another (say
```m1```), the symbols of ```m1``` aren't automatically visible
in ```m2```. You must import ```m1``` in ```m2``` for that.
How is that different from C++? I think you meant to say that if
`m1` imports `m2`, the symbols of `m2` don't automatically become
visible by importing `m1`. Indeed you also have to import `m2`
for that, *unless* `m1` `public`ly imports `m2`.
You can't just initialize variables willy-nilly in a module,
you must do them inside ```static this()```
Or declare them with an initial value. I'm not aware of a rule
that requires module level variables to be initialized in `static
this()`, but if you require them to be initialized at startup
with a value not known at compile time, then that is the place to
do it. I don't think you can go about this willy-nilly in C++
either...
Method function pointers don't exist in D, equivalent
functionality is achieved by using a delegate that captures the
context of a class instantiated object.
To use a function pointer explicitly, you can't just write
```(func)(arguments)```, it is ```(&func)(arguments)```(thank
you evilrat)
To take the address of a method (in order to assign it to a
delegate) requires `&`, yes, but not when calling the delegate.
--Bastiaan.