8 Ocak 2018 Pazartesi

std::launder

Giriş
C++17 ile geliyor.

Örnek
Elimizde şöyle bir kod olsun
struct X { const int n; };
union U { X x; float f; };
...

U u = {{ 1 }};
const alanı normalde değiştiremeyiz. Şu kod çalışmaz.
X *p = new (&u.x) X {2};
Yeni alana erişmek için şöyle yaparız.
assert(*std::launder(&u.x.n) == 2); //Will be true.
Burada ise pointer yanlış olduğu müddetçe std::launder() çağrısının işe yaramayacağı gösteriliyor.

Hiç yorum yok:

Yorum Gönder