C ++ 26 Programlama Dili: İşaretçi Adreslerinin Basitleştirilmiş Yönetimi

Adanali

Active member
C ++ 26 Programlama Dili: İşaretçi Adreslerinin Basitleştirilmiş Yönetimi


  1. C ++ 26 Programlama Dili: İşaretçi Adreslerinin Basitleştirilmiş Yönetimi

C ++ 26 ile herhangi bir işaretçinin adresini vermek mümkündür.








Rainer Grimm yıllardır yazılım mimarı, ekip ve eğitim müdürü olarak çalıştı. C ++ programlama dilleri, Python ve Haskell hakkında makaleler yazmayı seviyor, ancak uzman konferanslarla konuşmayı da seviyor. Modern C ++ blogunda, C ++ tutkusuyla yoğun bir şekilde ilgileniyor.













C ++ 20


Sadece puan türleri void,, const void VE std::nullptr_t Geçerlidirler. Herhangi bir işaretçinin adresini görüntülemek istiyorsanız, (const) void* dönüştürmek.


// formatPointer20.cpp

#include <format>
#include <iostream>
#include <string>

int main() {

double d = 123.456789;

//std::cout << "&d" << std::format("{}", &d) << 'n';
std::cout << "static_cast<void *>(&d): " << std::format("{}", static_cast<void *>(&d)) << 'n';
std::cout << "static_cast<const void *>(&d): " << std::format("{}", static_cast<const void *>(&d)) << 'n';
std::cout << "nullptr: " << std::format("{}", nullptr) << 'n';

}


İçinde main-Bilat olur doubleDeğerli çağrılır d Değerle 123,456789 başlatıldı. İşlev std::format adresi temsil eder.

İlk satırda, adresine denemeler yapılır. d doğrudan std::format(„{}“, &d) harcamak. Bu çizgi yorumlandı çünkü bir derleme hatasına yol açacaktır. İşlev std::format işaretçinin void* VEYA const void* Doğru şekilde formata dönüştürülür.

Sonraki üç satır ellerin nasıl std::format Biçimlendirilmiş ve doğru üretin. Bu satırların ilkinde, d Dönüştıktan sonra void* üretme. İkinci satırda adresi d Dönüştıktan sonra const void* üretme. Üçüncü satırda değer nullptr Sıfır işaretçiyi temsil eden çıkış.

İşte programın baskısı:








Çizgi etkinleştirildiğinde uzun bir hata mesajı görünür.

C ++ 26


C ++ 26 ile doğrudan işaretçiyi üretebilirsiniz:


// formatPointer26.cpp

#include <format>
#include <iostream>
#include <string>

int main() {

double d = 123.456789;
double* p = &d;

std::cout << "&d" << std::format("{:p}", p) << 'n';

}


Program açıkça tamamlanamaz. Bu, C ++ 26 ve P2510R3 teklifinin derleyicisinin desteğiyle çelişir. Bir sonraki yazımda size söyleyeceğim çünkü öyle.

Sırada ne var?


C ++ 26 ile rekabet, blokları olmayan veri yapıları için iki iyi özellik alacaktır: güncelleme ve tehlikeli bölümler.


(RME)
 
Üst