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.
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)
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.

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)