Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Charconv <> üst bilgisi aşağıdaki üye olmayan işlevleri içerir:
| Üye olmayan işlevler | Açıklama |
|---|---|
| to_chars | Bir tamsayı veya kayan nokta değerini dizisine chardönüştürme. |
| from_chars | dizisini char tamsayıya veya kayan nokta değerine dönüştürün. |
Bu dönüştürme işlevleri performans için ayarlanır ve ayrıca en kısa gidiş dönüş davranışını destekler. En kısa gidiş dönüş davranışı, bir sayı karaktere dönüştürüldüğünde, bu karakterleri kayan noktaya geri dönüştürürken özgün sayıyı kurtarmayı etkinleştirmek için yalnızca yeterli duyarlık yazılması anlamına gelir.
- Karakterler sayıya dönüştürülürken sayısal değerin null olarak sonlandırılması gerekmez. Benzer şekilde, bir sayıyı karaktere dönüştürürken sonuç null olarak sonlandırılmamıştır.
- Dönüştürme işlevleri bellek ayırmaz. Her durumda arabelleğe sahip olursunuz.
- Dönüştürme işlevleri oluşturmaz. Dönüştürmenin başarılı olup olmadığını belirleyebileceğiniz bir sonuç döndürülür.
- Dönüştürme işlevleri çalışma zamanı yuvarlama moduna duyarlı değildir.
- Dönüştürme işlevleri yerel ayara uygun değildir. Virgül kullanan yerel ayarlar için her zaman ondalık noktaları olarak
'.'yazdırır ve ayrıştırır ve hiçbir zaman ',' olarak ayrıştırır.
to_chars
Bir tamsayı veya kayan nokta değerini dizisine chardönüştürme.
value[first, last) aralığını doldurarak bir karakter dizesine dönüştürür; burada [first, last) geçerli bir aralık olmalıdır.
to_chars_result bir yapı döndürür. Dönüştürme başarılı olursa, tarafından to_char_result.ecbelirtildiği gibi üye ptr , yazılan karakterlerin son işaretçisidir. Aksi takdirde, to_char_result.ec değerine to_char_result.ptr errc::value_too_largesahip , değerine lastsahiptir ve [first, last) aralığının içeriği belirtilmez.
Başarısız olabilecek tek yol to_chars , sonucu tutmak için yetersiz büyük bir arabellek sağlamanızdır.
// integer to chars
to_chars_result to_chars(char* first, char* last, char value, int base = 10);
to_chars_result to_chars(char* first, char* last, signed char value, int base = 10);
to_chars_result to_chars(char* first, char* last, unsigned char value, int base = 10);
to_chars_result to_chars(char* first, char* last, short value, int base = 10);
to_chars_result to_chars(char* first, char* last, unsigned short value, int base = 10);
to_chars_result to_chars(char* first, char* last, int value, int base = 10);
to_chars_result to_chars(char* first, char* last, unsigned int value, int base = 10);
to_chars_result to_chars(char* first, char* last, long value, int base = 10);
to_chars_result to_chars(char* first, char* last, unsigned long value, int base = 10);
to_chars_result to_chars(char* first, char* last, long long value, int base = 10);
to_chars_result to_chars(char* first, char* last, unsigned long long value, int base = 10);
to_chars_result to_chars(char* first, char* last, bool value, int base = 10) = delete;
// floating-point to chars
to_chars_result to_chars(char* first, char* last, float value);
to_chars_result to_chars(char* first, char* last, double value);
to_chars_result to_chars(char* first, char* last, long double value);
to_chars_result to_chars(char* first, char* last, float value, chars_format fmt);
to_chars_result to_chars(char* first, char* last, double value, chars_format fmt);
to_chars_result to_chars(char* first, char* last, long double value, chars_format fmt);
to_chars_result to_chars(char* first, char* last, float value, chars_format fmt, int precision);
to_chars_result to_chars(char* first, char* last, double value, chars_format fmt, int precision);
to_chars_result to_chars(char* first, char* last, long double value, chars_format fmt, int precision);
Parametreler
birinci
Doldurulacak arabelleğin başlangıcını gösterir.
son
Doldurulacak arabelleğin sonunun bir karakter geçeceğini gösterir.
value
Dönüştürülecek değer. Negatifse value , gösterimi ile -başlar.
temel
Tamsayı dönüştürmeleri için, karaktere dönüştürülürken value kullanılacak taban. 2 ile 36 arasında (dahil) olmalıdır. Başta sıfır olmayacak. 10..35 (dahil) aralığındaki basamaklar,.. z
Fmt
Kayan nokta dönüştürmeleri için, bilimsel, sabit veya onaltılık gibi kullanılacak dönüştürme biçimini belirten bir bit maskesi. Ayrıntılar için bkz . chars_format .
kesinlik
Kayan nokta dönüştürmeleri için, dönüştürülen değer için duyarlık basamaklarının sayısı.
Dönüş değeri
Dönüştürmenin sonucunu içeren bir to_chars_result.
Açıklamalar
chars_format parametresini alan işlevler, dönüştürme tanımlayıcısını aşağıdaki gibi kullanıyor printf() gibi belirler: Dönüştürme tanımlayıcısı 'e' chars_format::fixed'f' fmt , ise chars_format::scientificfmt , 'a' ise (sonucun başında 0x olmadan) chars_format::hexfmt ve 'g' ise fmt ise olur.chars_format::general En kısa sabit gösterimin belirtilmesi yine de uzun çıkışla sonuçlanabilir çünkü değer çok büyük veya çok küçük olduğunda mümkün olan en kısa gösterim olabilir.
Aşağıdaki tabloda, ve precision parametrelerinin farklı birleşimleri fmt verilen dönüştürme davranışı açıklanmaktadır. "En kısa gidiş dönüş davranışı" terimi, ilgili from_chars işlevi kullanarak bu gösterimi ayrıştırmak değeri tam olarak kurtaracak şekilde gereken en az sayıda basamak yazmayı ifade eder.
fmt ve precision birleşimi |
Çıktı |
|---|---|
| Hiçbiri | Sabit veya bilimsel gösterimin hangisi daha kısaysa, kravat ayırıcı olarak sabit tercih edilir. Bu davranış, parametresini fmt alan herhangi bir aşırı yüklemeyle simülasyonunu yapamaz. |
fmt |
Belirtilen biçim için en kısa ve en kısa bilimsel biçim gibi en kısa gidiş dönüş davranışı. |
fmt ve precision |
Verilen duyarlığı, en kısa gidiş dönüş davranışı olmadan aşağıdaki printf() stili kullanır. |
Örnek
#include <charconv>
#include <stdio.h>
#include <system_error>
template <typename T> void TestToChars(const T t)
{
static_assert(std::is_floating_point_v<T>);
constexpr bool IsFloat = std::is_same_v<T, float>;
char buf[100]; // 100 is large enough for double and long double values because the longest possible outputs are "-1.23456735e-36" and "-1.2345678901234567e-100".
constexpr size_t size = IsFloat ? 15 : 24;
const std::to_chars_result res = std::to_chars(buf, buf + size, t); // points to buffer area it can use. Must be char, not wchar_t, etc.
if (res.ec == std::errc{}) // no error
{
// %.*s provides the exact number of characters to output because the output range, [buf, res.ptr), isn't null-terminated
printf("success: %.*s\n", static_cast<int>(res.ptr - buf), buf);
}
else // probably std::errc::value_too_large
{
printf("Error: %d\n", static_cast<int>(res.ec));
}
}
int main()
{
TestToChars(123.34);
return 0;
}
from_chars
dizisini char tamsayıya veya kayan nokta değerine dönüştürün.
// char to an integer value
from_chars_result from_chars(const char* first, const char* last, char& value, int base = 10);
from_chars_result from_chars(const char* first, const char* last, signed char& value, int base = 10);
from_chars_result from_chars(const char* first, const char* last, unsigned char& value, int base = 10);
from_chars_result from_chars(const char* first, const char* last, short& value, int base = 10);
from_chars_result from_chars(const char* first, const char* last, unsigned short& value, int base = 10);
from_chars_result from_chars(const char* first, const char* last, int& value, int base = 10);
from_chars_result from_chars(const char* first, const char* last, unsigned int& value, int base = 10);
from_chars_result from_chars(const char* first, const char* last, long& value, int base = 10);
from_chars_result from_chars(const char* first, const char* last, unsigned long& value, int base = 10);
from_chars_result from_chars(const char* first, const char* last, long long& value, int base = 10);
from_chars_result from_chars(const char* first, const char* last, unsigned long long& value, int base = 10);
// char to a floating-point value
from_chars_result from_chars(const char* first, const char* last, float& value, chars_format fmt = chars_format::general);
from_chars_result from_chars(const char* first, const char* last, double& value, chars_format fmt = chars_format::general);
from_chars_result from_chars(const char* first, const char* last, long double& value, chars_format fmt = chars_format::general);
Parametreler
birinci
Dönüştürülecek karakterlerin arabelleğinin başlangıcını gösterir.
son
Dönüştürülecek karakterlerin arabelleğinin bitiş öğesinin birini gösterir.
value
Dönüştürme başarılı olursa, dönüştürmenin sonucunu içerir.
temel
Tamsayı dönüştürmeleri için, dönüştürme sırasında kullanılacak taban. 2 ile 36 arasında (dahil) olmalıdır.
Fmt
Kayan nokta dönüştürmeleri için dönüştürülen karakter dizisinin biçimi. Ayrıntılar için bkz . chars_format .
Açıklamalar
from_chars() İşlevler , [first, last) dizesini bir sayı deseni için çözümler; burada [first, last) geçerli bir aralık olması gerekir.
Karakterler ayrıştırılırken boşluk yoksayılamaz. strtod()Örneğin, arabellek geçerli bir sayısal gösterimle başlamalıdır.
from_chars_result bir yapı döndürür.
Bir sayı deseni ile eşleşen karakter yoksa, value değiştirilmemiş, from_chars_result.ptr öğesini işaret eden firstve from_chars_result.ec şeklindedir errc::invalid_argument.
Yalnızca bazı karakterler bir sayı deseni ile eşleşiyorsa, from_chars_result.ptr ilk karakterin desenle eşleşmediğini veya tüm karakterlerin eşleşmesi durumunda parametrenin last değerine sahip olduğunu gösterir.
Ayrıştırılan değer türüyle valuevalue temsil edilebilen aralıkta değilse, değiştirilmemiştir ve from_chars_result.ec şeklindedirerrc::result_out_of_range.
Aksi takdirde, value yuvarlamadan sonra ayrıştırılan değere ayarlanır ve from_chars_result.ec değerine errc{}eşittir.
Örnek
#include <charconv>
#include <stdio.h>
#include <string_view>
#include <system_error>
double TestFromChars(const std::string_view sv)
{
const char* const first = sv.data();
const char* const last = first + sv.size();
double dbl;
const std::from_chars_result res = std::from_chars(first, last, dbl);
if (res.ec == std::errc{}) // no error
{
printf("success: %g\n", dbl);
}
else
{
printf("Error: %d\n", static_cast<int>(res.ec));
}
return dbl;
}
int main()
{
double dbl = TestFromChars("123.34");
return 0;
}
Gereksinimler
Üst bilgi:<charconv>
Ad alanı: std
/std:c++17 veya üzeri gereklidir.
Ayrıca bkz.
<charconv>
Printf() biçim tanımlayıcılarını yuvarlayanen kısa ondalık dize