C ++ 20 standardında, dizi türlerinin örtük ömür boyu tür olduğu söylenir .
Örtük olmayan bir ömür boyu türüne sahip bir dizinin dolaylı olarak oluşturulabileceği anlamına mı geliyor? Örtülü bir dizinin oluşturulması dizinin öğelerinin oluşturulmasına neden olmaz mı?
Bu durumu düşünün:
//implicit creation of an array of std::string
//but not the std::string elements:
void * ptr = operator new(sizeof (std::string) * 10);
//use launder to get a "pointer to object" (which object?)
std::string * sptr = std::launder(static_cast<std::string*>(ptr));
//pointer arithmetic on not created array elements well defined?
new (sptr+1) std::string("second element");
Bu kod artık C ++ 20'den beri UB değil mi?
Belki bu şekilde daha iyidir?
//implicit creation of an array of std::string
//but not the std::string elements:
void * ptr = operator new(sizeof (std::string) * 10);
//use launder to get a "pointer to the array of 10 std::string"
std::string (* sptr)[10] = std::launder(static_cast<std::string(*)[10]>(ptr));
//pointer arithmetic on an array is well defined
new (*sptr+1) std::string("second element");
1
Sadece (taslak) C ++ 20 standardı üzerinden bir arama yaptım ve dizileri "örtük ömür boyu türü" olarak tanımlayan hiçbir şey bulamadım (ve evet, varyasyonları aradım). Lütfen talebinizin daha ayrıntılı bir açıklamasını girin (örn. Standarttaki bölüm ve fıkra). Herhangi bir alakalı bağlamda, kaynağı bulamadan sorunuzu cevaplamak biraz zor.
—
Peter
@Peter: eel.is/c++draft/basic.types#9 , son cümle
—
Geza
PDF open-std.org/jtc1/sc22/wg21/docs/papers/2020/n4849.pdf (görünüşte en son çalışan taslak) bakıyordum ve bu cümleye bile sahip değil. Görünüşe göre "örtük ömür boyu" anlamını da bulmanız gerekecek. Bağlantınızın yayınlanmış çalışma taslaklarına bile girmemiş olan bazı "devam eden düzenlemeler" almış olabileceğinden şüpheleniyorum.
—
Peter
@Peter Değişiklikler, P0593'ün son Prag toplantısından standartla birleştirilmesinin sonucudur . Henüz ortaya çıkan taslağı henüz yayınlamadılar, ancak bu taahhütte birleştirilmiş ifadeleri görebilirsiniz .
—
ceviz