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) << '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)
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("{
}
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)