D equivalent of C++11's function local static initialization?
Ola Fosheim Grøstad via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed May 17 00:25:01 PDT 2017
On Wednesday, 17 May 2017 at 07:08:07 UTC, bauss wrote:
> On Wednesday, 17 May 2017 at 03:08:39 UTC, Timothee Cour wrote:
>> NOTE: curious about both cases:
>> * thread local
>> * shared
>>
>> On Tue, May 16, 2017 at 8:04 PM, Timothee Cour
>> <thelastmammoth at gmail.com> wrote:
>>> what's the best D equivalent of C++11's function local static
>>> initialization?
>>> ```
>>> void fun(){
>>> static auto a=[](){
>>> //some code
>>> return some_var;
>>> }
>>> }
>>> ```
>>>
>>> (C++11 guarantees thread safety)
>
> I don't know the exact equivalent, mostly because I don't
> really know what the C++ statement does tbh. Tried to look it
> up real quick, but can't seem to find anything actual
> information on it.
It initializes a global variable "a" once from an unnamed class
object with a "opCall" style method on it.
Lambdas in C++ are regular objects with some syntactical sugar
over it.
http://en.cppreference.com/w/cpp/language/storage_duration#Static_local_variables
«If multiple threads attempt to initialize the same static local
variable concurrently, the initialization occurs exactly once
(similar behavior can be obtained for arbitrary functions with
std::call_once).
Note: usual implementations of this feature use variants of the
double-checked locking pattern, which reduces runtime overhead
for already-initialized local statics to a single non-atomic
boolean comparison.»
More information about the Digitalmars-d-learn
mailing list