On Wednesday, 12 July 2017 at 11:34:45 UTC, Jiyan wrote:
Hey,
yes i did but to be honest i used dmd in debug version.
The thing about the static one, is that it creates a local
object A isnt that a performance issue itself - or am i wrong -
im confused actually :P?
Debug = no optimization. Looking at the generated assembly in a
debug build is worthless.
You raise a valid point. In a debug build, you're probably right
- it will need to copy the temporary to the target. With
optimizations enabled, NRVO[0] will populate the target directly,
resulting in roughly the equivalent of this code:
struct A {
int field;
static void opCall(A* p) {
p.field = getDataFromFile("file.txt");
}
}
A a;
A(&a);
If the function is inlined, the whole problem is of course moot.
There are probably other optimizations that can interfere with
what I've described.
--
Biotronic
[0]: https://en.wikipedia.org/wiki/Return_value_optimization