C++26 programlama dili: işaretçi adreslerinin basitleştirilmiş yönetimi

Adanali

Member


  1. C++26 programlama dili: işaretçi adreslerinin basitleştirilmiş yönetimi

C++26 ile herhangi bir işaretçinin adresini yazdırabilirsiniz.


Duyuru








Rainer Grimm uzun yıllardır yazılım mimarı, ekip ve eğitim lideri olarak çalışmaktadır. C++, Python ve Haskell programlama dilleri üzerine makaleler yazmaktan hoşlanıyor, aynı zamanda özel konferanslarda sık sık konuşmaktan da hoşlanıyor. Modern C++ adlı blogunda C++ tutkusunu yoğun bir şekilde ele alıyor.













C++20


Yalnızca işaretçi türleri void, const void VE std::nullptr_t bunlar geçerlidir. Herhangi bir işaretçinin adresini görüntülemek istiyorsanız onu girmelisiniz (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';

}


içinde main-Fonksiyon bir hale gelir double-Adlandırılmış değişken d değer ile 123,456789 başlatıldı. fonksiyon std::format adresi temsil eder.

İlk yorum yapılan satır adresini almaya çalışır d doğrudan std::format(„{}“, &d) harcamak. Bu satır, derleme hatasına yol açacağı için yorumlanmamıştır. fonksiyon std::format işaretçinin eklenmesini gerektirir void* VEYA const void* doğru şekilde biçimlendirmek için dönüştürüldü.

Sonraki üç satır işaretçilerin nasıl kullanılacağını gösterir std::format doğru şekilde biçimlendirilmiş ve görüntülenmiştir. Bu satırlardan ilki adresini içerir. d dönüştürdükten sonra void* piyasaya sürülmüş. İkinci satırda adresini içerir d dönüştürdükten sonra const void* piyasaya sürülmüş. Üçüncü satır değeri gösterir nullptr Boş bir işaretçiyi temsil eden çıktı.

İşte programın çıktısı:








Yorum satırını etkinleştirdiğinizde uzun bir hata mesajı alıyorsunuz.

C++26


C++26 ile işaretçiyi doğrudan görüntüleyebilirsiniz:


// 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';

}


Açıkçası program derlenemiyor. Bu, C++26 ve önerilen P2510R3 için derleyici desteğiyle çelişir. Bunun neden böyle olduğunu bir sonraki yazımda anlatacağım.

Bir sonraki adım nedir?


Yarışma, C++26 ile kilitsiz veri yapıları için iki ilginç özelliğe sahip olacak: Okuma-Kopyalama Güncellemesi ve Tehlike İşaretçileri.


(Ben)
 
Üst