Yazılım Geliştirme: C ++ 26'da yer alan yer tutucular ve kapsamlı karakterler

Adanali

Active member
Yazılım Geliştirme: C ++ 26'da yer alan yer tutucular ve kapsamlı karakterler


  1. Yazılım Geliştirme: C ++ 26'da yer alan yer tutucular ve kapsamlı karakterler

C ++ 26 için, büyük yansıma ve son haftalarda sunduğum sözleşmelere ek olarak, bazı daha küçük ve kullanışlı eklemeler de var.








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.













Yer tutucu


Yapılandırılmış bağlar, farklı değişkenleri yapılandırılmış bir nesnenin elemanlarına bağlamanın mümkün olduğu C ++ 17'nin bir özelliğidir.

Aşağıdaki program, bir işlevden farklı değerleri döndürmek ve tekrar paketlemek için Tuel ve Yapılandırılmış bağların kullanımını göstermektedir.


// placeholder1.cpp

#include <tuple>
#include <string>
#include <iostream>

// Function that returns three values
std::tuple<int, std::string, double> getThreeValues() {
int intValue = 42;
std::string strValue = "example";
double doubleValue = 3.14;
return std::make_tuple(intValue, strValue, doubleValue);
}

int main() {

// Retrieve the three values using structured binding
auto [intValue, strValue, doubleValue] = getThreeValues();

// Print the values
std::cout << "Integer: " << intValue << 'n';
std::cout << "String: " << strValue << 'n';
std::cout << "Double: " << doubleValue << 'n';

}


İşlev getThreeValues Üç farklı veri türü içeren bir tupel döndürecek şekilde tanımlanmıştır: bir intA std::string ve bir double. Bu değerler bu nedenle std::make_tuple bir tupello ile dolu ve işlevden döndü.

İçinde main-Program üçünü çağırıyor getThreeValues Yapılandırılmış bağların yardımıyla kırmızı değerler. Yapılandırılmış bağlar, programın Tupel'i doğrudan üç ayrı değişkenle paketlemesine izin verir: intValue,, strValue VE doubleValue. Bu, kodu tupelin bozulma kılavuzundan daha okunabilir ve daha kolay hale getirir.

Bazen işlevden üç değere de ihtiyacınız olmaz getThreeValues.


// placeholder2.cpp

#include <tuple>
#include <string>
#include <iostream>

// Function that returns three values
std::tuple<int, std::string, double> getThreeValues() {
int intValue = 42;
std::string strValue = "example";
double doubleValue = 3.14;
return std::make_tuple(intValue, strValue, doubleValue);
}

int main() {

// Retrieve the three values using structured binding
auto [_, strValue, doubleValue] = getThreeValues();

// Print the values
std::cout << "String: " << strValue << 'n';
std::cout << "Double: " << doubleValue << 'n';

}


Bu sefer intValue işlevden getThreeValues Aşağıdaki kodda gerekli değildir. Bir anlaşmadan, altı çizili olana kadar.

Aynı zamanda, bu, derleyicinin bir uyarı yaymadığı anlamına gelir çünkü değişken _ Kullanılmıyor:

Ne yazık ki, sezgisel _ Bir tanımlayıcı olarak yalnızca bir kez kullanılabilir. Bu kısıtlama C ++ 26 için geçerli değildir:


// placeholder3.cpp

#include <tuple>
#include <string>
#include <iostream>

// Function that returns three values
std::tuple<int, std::string, double> getThreeValues() {
int intValue = 42;
std::string strValue = "example";
double doubleValue = 3.14;
return std::make_tuple(intValue, strValue, doubleValue);
}

int main() {

// Retrieve the three values using structured binding
auto [_, strValue, _] = getThreeValues();

// Print the values
std::cout << "String: " << strValue << 'n';

}


Bu varyantta ne intValue Yine de doubleValue işlevden getThreeValues gerekli. Sürekli iki altı çizili kullanıyorum.

Genişletilmiş karakterler seti


Temel işaretlerin hızında üç yeni karakter mevcuttur:








Aşağıdaki program, RAW String Literals için üçünü de kullanır.



#include <iostream>

int main() {

std::cout << 'n';

auto raw1 = R"@(Hellon)@";
auto raw2 = R"$(Hellot)$";
auto raw3 = R"`(Hellob)`";

std::cout << "raw1: " << raw1 << 'n';
std::cout << "raw2: " << raw2 << 'n';
std::cout << "raw3: " << raw3 << 'n';

std::cout << 'n';

}


Bu nedenle program üç kelimelik kaba bir dize tanımlar: raw1,, raw2 VE raw3. Kaba dize değişmezleri, C ++ 'dır. delimiter(...)delimiter Dahil olsa da delimiter Herhangi bir karakter bölümü olabilir. Böylece karakter zinciri gibi özel bir karakter olabilir n,, t Veya b yorumlanmadan içerik.

  • raw1 olarak tanımlanır R„@(Hellon)@“Metin Hellon Olmadan içerir n Bir çizgi molası olarak yorumlanır
  • raw2 olarak tanımlanır R„$(Hellot)$“bu metin Hellot Olmadan içerir t bir tablo işareti olarak yorumlayın
  • raw3 olarak tanımlanır R„`(Hellob)`“bu metin Hellob Olmadan içerir b Geri dönüş olarak yorumlanır.
Son olarak, programın sürümünü görelim:








Sırada ne var?


C ++ 26'nın ana dili, paketlerin endekslenmesi gibi daha fazla iyileştirme sunar. Bunun hakkında bir sonraki blog makalesinde yazacağım.


(RME)
 
Üst