Sdílet prostřednictvím


char_traits – struktura

Struktura char_traits popisuje atributy přidružené ke znaku.

Syntaxe

template <class CharType>
struct char_traits;

Parametry

CharType
Datový typ elementu.

Poznámky

Struktura šablony popisuje různé znakové vlastnosti pro typ CharType. Šablona třídy basic_string i několik šablon tříd iostream, včetně basic_ios, používají tyto informace k manipulaci s prvky typu CharType. Takový typ prvku nesmí vyžadovat explicitní konstrukci nebo zničení. Musí zadat výchozí konstruktor, konstruktor kopírování a operátor přiřazení s očekávanou sémantikou. Bitová kopie musí mít stejný účinek jako přiřazení. Žádná z členských funkcí struktury char_traits nemůže vyvolat výjimky.

Typedefs

Název typu Popis
char_type Typ znaku.
int_type Celočíselná hodnota, která může představovat znak typu char_type nebo znak konce souboru (EOF).
off_type Celočíselná hodnota, která může představovat posuny mezi pozicemi v datovém proudu.
pos_type Celočíselné typy, které mohou představovat pozice v datovém proudu.
state_type Typ, který představuje stav převodu pro vícebajtové znaky v datovém proudu.

Členské funkce

Členová funkce Popis
přiřadit Přiřadí jednu znakové hodnoty k druhé.
porovnat Porovná až zadaný počet znaků ve dvou řetězcích.
kopírovat Zkopíruje zadaný počet znaků z jednoho řetězce do druhého. Zastaralé Místo toho použijte char_traits::_Copy_s .
_Copy_s Zkopíruje zadaný počet znaků z jednoho řetězce do druhého.
eof Vrátí znak konce souboru (EOF).
Eq Testuje, zda jsou dva char_type znaky stejné.
eq_int_type Testuje, zda jsou dva znaky reprezentované jako int_typeznaky stejné.
find Vyhledá první výskyt zadaného znaku v rozsahu znaků.
length Vrátí délku řetězce.
lt Testuje, zda je jeden znak menší než druhý.
pohnout Zkopíruje zadaný počet znaků v sekvenci do jiné, možné překrývající se sekvence. Zastaralé Místo toho použijte char_traits::_Move_s .
_Move_s Zkopíruje zadaný počet znaků v sekvenci do jiné, možné překrývající se sekvence.
not_eof Testuje, zda je znak koncem souboru (EOF).
to_char_type Převede int_type znak na odpovídající char_type znak a vrátí výsledek.
to_int_type Převede char_type znak na odpovídající int_type znak a vrátí výsledek.

Požadavky

Header:<string>

Obor názvů: std

char_traits::assign

Přiřadí jednu znakovou hodnotu jinému nebo rozsahu prvků v řetězci.

static void assign(char_type& _CharTo,
    const char_type& _CharFrom);

static char_type *assign(char_type* strTo,
    size_t _Num,
    char_type _CharFrom);

Parametry

_ CharFrom Znak, jehož hodnota má být přiřazena.

_CharTo
Prvek, který má být přiřazen hodnotu znaku.

strTo
Řetězcové nebo znakové pole, jehož počáteční prvky mají být přiřazeny hodnoty znaků.

_Num
Počet prvků, které budou přiřazeny hodnoty.

Návratová hodnota

Druhá členová funkce vrátí ukazatel na řetězec, jehož první _Num prvky byly přiřazeny hodnoty _CharFrom.

Příklad

// char_traits_assign.cpp
// compile with: /EHsc
#include <string>
#include <iostream>

int main( )
{
   using namespace std;

   // The first member function assigning
   // one character value to another character
   char ChTo = 't';
   const char ChFrom = 'f';
   cout << "The initial characters ( ChTo , ChFrom ) are: ( "
        << ChTo << " , " << ChFrom << " )." << endl;
   char_traits<char>::assign ( ChTo , ChFrom );
   cout << "After assigning, the characters ( ChTo , ChFrom ) are: ( "
        << ChTo << " , " << ChFrom << " )." << endl << endl;

   // The second member function assigning
   // character values to initial part of a string
   char_traits<char>::char_type s1[] = "abcd-1234-abcd";
   char_traits<char>::char_type* result1;
   cout << "The target string s1 is: " << s1 << endl;
   result1 = char_traits<char>::assign ( s1 , 4 , 'f' );
   cout << "The result1 = assign ( s1 , 4 , 'f' ) is: "
        << result1 << endl;
}
The initial characters ( ChTo , ChFrom ) are: ( t , f ).
After assigning, the characters ( ChTo , ChFrom ) are: ( f , f ).

The target string s1 is: abcd-1234-abcd
The result1 = assign ( s1 , 4 , 'f' ) is: ffff-1234-abcd

char_traits::char_type

Typ znaku.

typedef CharType char_type;

Poznámky

Typ je synonymem pro parametr CharTypešablony .

Příklad

Příklad, jak deklarovat a používatchar_type, najdete v příkladu kopírování .

char_traits::compare

Porovná až zadaný počet znaků ve dvou řetězcích.

static int compare(const char_type* str1,
    const char_type* str2,
    size_t _Num);

Parametry

str1
První ze dvouřetězcůch

str2
Druhá ze dvou řetězců, které se mají porovnat mezi sebou.

_Num
Počet prvků v řetězcích, které se mají porovnat.

Návratová hodnota

Záporná hodnota, pokud je první řetězec menší než druhý řetězec, 0, pokud jsou dva řetězce stejné, nebo kladná hodnota, pokud je první řetězec větší než druhý řetězec.

Poznámky

Porovnání řetězců je tvořeno elementem, nejprve testuje rovnost a pak, pokud se dvojice prvků v sekvenčních testech nerovná, testují se pro méně než.

Pokud se dva řetězce porovnávají s rozsahem, ale jeden je delší než druhý, je kratší než ten delší.

Příklad

// char_traits_compare.cpp
// compile with: /EHsc
#include <string>
#include <iostream>

int main() {
   using namespace std;

   char_traits<char>::char_type* s1 = "CAB";
   char_traits<char>::char_type* s2 = "ABC";
   char_traits<char>::char_type* s3 = "ABC";
   char_traits<char>::char_type* s4 = "ABCD";

   cout << "The string s1 is: " << s1 << endl;
   cout << "The string s2 is: " << s2 << endl;
   cout << "The string s3 is: " << s3 << endl;
   cout << "The string s4 is: " << s4 << endl;

   int comp1, comp2, comp3, comp4;
   comp1 = char_traits<char>::compare ( s1 , s2 , 2 );
   comp2 = char_traits<char>::compare ( s2 , s3 , 3 );
   comp3 = char_traits<char>::compare ( s3 , s4 , 4 );
   comp4 = char_traits<char>::compare ( s4 , s3 , 4 );
   cout << "compare ( s1 , s2 , 2 ) = " << comp1 << endl;
   cout << "compare ( s2 , s3 , 3 ) = " << comp2 << endl;
   cout << "compare ( s3 , s4 , 4 ) = " << comp3 << endl;
   cout << "compare ( s4 , s3 , 4 ) = " << comp4 << endl;
}

char_traits::copy

Zkopíruje zadaný počet znaků z jednoho řetězce do druhého.

Tato metoda je potenciálně nebezpečná, protože volající spoléhá na kontrolu správnosti předaných hodnot. Zvažte místo toho použití char_traits::_Copy_s .

static char_type *copy(char_type* _To,
    const char_type* _From,
    size_t _Num);

Parametry

_K
Prvek na začátku řetězce nebo pole znaků určeného pro příjem zkopírované sekvence znaků.

_Od
Prvek na začátku zdrojového řetězce nebo pole znaků, které se mají zkopírovat.

_Num
Počet prvků, které se mají zkopírovat.

Návratová hodnota

První prvek zkopírovaný do řetězce nebo pole znaků cílené na příjem zkopírované sekvence znaků.

Poznámky

Sekvence zdrojových a cílových znaků se nesmí překrývat.

Příklad

// char_traits_copy.cpp
// compile with: /EHsc /W3
#include <string>
#include <iostream>

int main( )
{
   using namespace std;

   char_traits<char>::char_type s1[] = "abcd-1234-abcd";
   char_traits<char>::char_type s2[] = "ABCD-1234";
   char_traits<char>::char_type* result1;
   cout << "The source string is: " << s1 << endl;
   cout << "The destination string is: " << s2 << endl;
   // Note: char_traits::copy is potentially unsafe, consider
   // using char_traits::_Copy_s instead.
   result1 = char_traits<char>::copy ( s1 , s2 , 4 );  // C4996
   cout << "The result1 = copy ( s1 , s2 , 4 ) is: "
        << result1 << endl;
}
The source string is: abcd-1234-abcd
The destination string is: ABCD-1234
The result1 = copy ( s1 , s2 , 4 ) is: ABCD-1234-abcd

char_traits::_Copy_s

Zkopíruje zadaný počet znaků z jednoho řetězce do druhého.

static char_type *_Copy_s(
    char_type* dest,
    size_t dest_size,
    const char_type* _From,
    size_t count);

Parametry

dest
Řetězec nebo pole znaků cílené na příjem zkopírované sekvence znaků.

dest_size
Velikost dest. Pokud char_type ano char, je tato velikost v bajtech. Pokud char_type je wchar_t, pak tato velikost je ve slovech.

_Od
Zdrojový řetězec nebo pole znaků, které se mají zkopírovat.

count
Počet prvků, které se mají zkopírovat.

Návratová hodnota

Řetězec nebo pole znaků cílené na příjem zkopírované sekvence znaků.

Poznámky

Sekvence zdrojových a cílových znaků se nesmí překrývat.

Příklad

// char_traits__Copy_s.cpp
// compile with: /EHsc
#include <string>
#include <iostream>

int main( )
{
    using namespace std;

    char_traits<char>::char_type s1[] = "abcd-1234-abcd";
    char_traits<char>::char_type s2[] = "ABCD-1234";
    char_traits<char>::char_type* result1;
    cout << "The source string is: " << s1 << endl;
    cout << "The destination string is: " << s2 << endl;
    result1 = char_traits<char>::_Copy_s(s1,
        char_traits<char>::length(s1), s2, 4);
    cout << "The result1 = _Copy_s(s1, "
         << "char_traits<char>::length(s1), s2, 4) is: "
         << result1 << endl;
}
The source string is: abcd-1234-abcd
The destination string is: ABCD-1234
The result1 = _Copy_s(s1, char_traits<char>::length(s1), s2, 4) is: ABCD-1234-abcd

char_traits::eof

Vrátí znak konce souboru (EOF).

static int_type eof();

Návratová hodnota

Znak EOF.

Poznámky

Hodnota, která představuje konec souboru (například EOF nebo WEOF).

Standardní jazyk C++ uvádí, že tato hodnota nesmí odpovídat platné char_type hodnotě. Kompilátor jazyka Microsoft C++ vynucuje toto omezení pro typ char, ale ne pro typ wchar_t. To zachycuje níže uvedený příklad.

Příklad

// char_traits_eof.cpp
// compile with: /EHsc
#include <string>
#include <iostream>

int main()
{
    using namespace std;

    char_traits<char>::char_type ch1 = 'x';
    char_traits<char>::int_type int1;
    int1 = char_traits<char>::to_int_type(ch1);
    cout << "char_type ch1 is '" << ch1 << "' and corresponds to int_type "
         << int1 << "." << endl << endl;

    char_traits<char>::int_type int2 = char_traits<char>::eof();
    cout << "The eof marker for char_traits<char> is: " << int2 << endl;

    char_traits<wchar_t>::int_type int3 = char_traits<wchar_t>::eof();
    cout << "The eof marker for char_traits<wchar_t> is: " << int3 << endl;
}
char_type ch1 is 'x' and corresponds to int_type 120.

The eof marker for char_traits<char> is: -1
The eof marker for char_traits<wchar_t> is: 65535

char_traits::eq

Testuje, zda jsou dva char_type znaky stejné.

static bool eq(const char_type& _Ch1, const char_type& _Ch2);

Parametry

_Ch1
První zedvouch

_Ch2
Druhý ze dvou znaků, které se mají testovat na rovnost.

Návratová hodnota

true je-li první znak roven druhému znaku; jinak false.

Příklad

// char_traits_eq.cpp
// compile with: /EHsc
#include <string>
#include <iostream>

int main( )
{
   using namespace std;

   char_traits<char>::char_type ch1 =  'x';
   char_traits<char>::char_type ch2 =  'y';
   char_traits<char>::char_type ch3 =  'x';

   // Testing for equality
   bool b1 = char_traits<char>::eq ( ch1 , ch2 );
   if ( b1 )
      cout << "The character ch1 is equal "
           << "to the character ch2." << endl;
   else
      cout << "The character ch1 is not equal "
           << "to the character ch2." << endl;

   // An equivalent and alternatively test procedure
   if ( ch1 == ch3 )
      cout << "The character ch1 is equal "
           << "to the character ch3." << endl;
   else
      cout << "The character ch1 is not equal "
           << "to the character ch3." << endl;
}
The character ch1 is not equal to the character ch2.
The character ch1 is equal to the character ch3.

char_traits::eq_int_type

Testuje, zda jsou dva znaky reprezentované jako int_typeznaky stejné nebo ne.

static bool eq_int_type(const int_type& _Ch1, const int_type& _Ch2);

Parametry

_Ch1
První ze dvou znaků, které mají být testovány na rovnost jako int_types.

_Ch2
Druhá ze dvou znaků, které se mají testovat na rovnost jako int_types.

Návratová hodnota

true je-li první znak roven druhému znaku; jinak false.

Příklad

// char_traits_eq_int_type.cpp
// compile with: /EHsc
#include <string>
#include <iostream>

int main( )
{
   using namespace std;

   char_traits<char>::char_type ch1 =  'x';
   char_traits<char>::char_type ch2 =  'y';
   char_traits<char>::char_type ch3 =  'x';

   // Converting from char_type to int_type
   char_traits<char>::int_type int1, int2 , int3;
   int1 =char_traits<char>:: to_int_type ( ch1 );
   int2 =char_traits<char>:: to_int_type ( ch2 );
   int3 =char_traits<char>:: to_int_type ( ch3 );

   cout << "The char_types and corresponding int_types are:"
        << "\n    ch1 = " << ch1 << " corresponding to int1 = "
        << int1 << "."
        << "\n    ch2 = " << ch2 << " corresponding to int1 = "
        << int2 << "."
        << "\n    ch3 = " << ch3 << " corresponding to int1 = "
        << int3 << "." << endl << endl;

   // Testing for equality of int_type representations
   bool b1 = char_traits<char>::eq_int_type ( int1 , int2 );
   if ( b1 )
      cout << "The int_type representation of character ch1\n "
           << "is equal to the int_type representation of ch2."
           << endl;
   else
      cout << "The int_type representation of character ch1\n is "
           << "not equal to the int_type representation of ch2."
           << endl;

   // An equivalent and alternatively test procedure
   if ( int1 == int3 )
      cout << "The int_type representation of character ch1\n "
           << "is equal to the int_type representation of ch3."
           << endl;
   else
      cout << "The int_type representation of character ch1\n is "
           << "not equal to the int_type representation of ch3."
           << endl;
}
The char_types and corresponding int_types are:
    ch1 = x corresponding to int1 = 120.
    ch2 = y corresponding to int1 = 121.
    ch3 = x corresponding to int1 = 120.

The int_type representation of character ch1
is not equal to the int_type representation of ch2.
The int_type representation of character ch1
is equal to the int_type representation of ch3.

char_traits::find

Vyhledá první výskyt zadaného znaku v rozsahu znaků.

static const char_type* find(const char_type* str,
    size_t _Num,
    const char_type& _Ch);

Parametry

Str
První znak v řetězci, který se má prohledávat.

_Num
Počet pozic, které se počítají od prvního, v rozsahu, který se má prohledávat.

_Ch
Znak, který se má vyhledat v oblasti.

Návratová hodnota

Ukazatel na první výskyt zadaného znaku v oblasti, pokud je nalezena shoda; v opačném případě je ukazatel null.

Příklad

// char_traits_find.cpp
// compile with: /EHsc
#include <string>
#include <iostream>

int main( )
{
   using namespace std;

   const char* s1 = "f2d-1234-abcd";
   const char* result1;
   cout << "The string to be searched is: " << s1 << endl;

   // Searching for a 'd' in the first 6 positions of string s1
   result1 = char_traits<char>::find ( s1 , 6 , 'd');
   cout << "The character searched for in s1 is: "
        << *result1 << endl;
   cout << "The string beginning with the first occurrence\n "
        << "of the character 'd' is: " << result1 << endl;

   // When no match is found the NULL value is returned
   const char* result2;
   result2 = char_traits<char>::find ( s1 , 3 , 'a');
   if ( result2 == NULL )
      cout << "The result2 of the search is NULL." << endl;
   else
      cout << "The result2 of the search  is: " << result1
           << endl;
}
The string to be searched is: f2d-1234-abcd
The character searched for in s1 is: d
The string beginning with the first occurrence
of the character 'd' is: d-1234-abcd
The result2 of the search is NULL.

char_traits::int_type

Celočíselná hodnota, která může představovat znak typu char_type nebo znak konce souboru (EOF).

typedef long int_type;

Poznámky

Musí být možné přetypovat hodnotu typu CharType tak, aby int_type se vrátila zpět CharType beze změny původní hodnoty.

Příklad

Podívejte se na příklad eq_int_type příklad, jak deklarovat a používat int_type.

char_traits::length

Vrátí délku řetězce.

static size_t length(const char_type* str);

Parametry

Str
Řetězec C, jehož délka se měří.

Návratová hodnota

Počet prvků v sekvenci, které se měří, nezahrnuje ukončovací znak null.

Příklad

// char_traits_length.cpp
// compile with: /EHsc
#include <string>
#include <iostream>

int main( )
{
   using namespace std;
   const char* str1= "Hello";
   cout << "The C-string str1 is: " << str1 << endl;

   size_t lenStr1;
   lenStr1 = char_traits<char>::length ( str1 );
   cout << "The length of C-string str1 is: "
        << lenStr1 << "." << endl;
}
The C-string str1 is: Hello
The length of C-string str1 is: 5.

char_traits::lt

Testuje, zda je jeden znak menší než druhý.

static bool lt(const char_type& _Ch1, const char_type& _Ch2);

Parametry

_Ch1
První ze dvou znaků, které se mají testovat na méně než

_Ch2
Druhý ze dvou znaků, které se mají testovat na méně než.

Návratová hodnota

true je-li první znak menší než druhý znak; jinak false.

Příklad

// char_traits_lt.cpp
// compile with: /EHsc
#include <string>
#include <iostream>

int main( )
{
   using namespace std;
   char_traits<char>::char_type ch1 =  'x';
   char_traits<char>::char_type ch2 =  'y';
   char_traits<char>::char_type ch3 =  'z';

   // Testing for less than
   bool b1 = char_traits<char>::lt ( ch1 , ch2 );
   if ( b1 )
      cout << "The character ch1 is less than "
           << "the character ch2." << endl;
   else
      cout << "The character ch1 is not less "
           << "than the character ch2." << endl;

   // An equivalent and alternatively test procedure
   if ( ch3 <  ch2 )
      cout << "The character ch3 is less than "
           << "the character ch2." << endl;
   else
      cout << "The character ch3 is not less "
           << "than the character ch2." << endl;
}
The character ch1 is less than the character ch2.
The character ch3 is not less than the character ch2.

char_traits::move

Zkopíruje zadaný počet znaků v sekvenci do jiné, případně překrývající se sekvence.

Tato metoda je potenciálně nebezpečná, protože volající spoléhá na kontrolu správnosti předaných hodnot. Zvažte místo toho použití char_traits::_Move_s .

static char_type *move(char_type* _To,
    const char_type* _From,
    size_t _Num);

Parametry

_K
Prvek na začátku řetězce nebo pole znaků určeného pro příjem zkopírované sekvence znaků.

_Od
Prvek na začátku zdrojového řetězce nebo pole znaků, které se mají zkopírovat.

_Num
Počet prvků, které se mají zkopírovat ze zdrojového řetězce.

Návratová hodnota

První prvek _To zkopírován do řetězce nebo pole znaků cíleného na příjem zkopírované sekvence znaků.

Poznámky

Zdroj a cíl se můžou překrývat.

Příklad

// char_traits_move.cpp
// compile with: /EHsc /W3
#include <string>
#include <iostream>

int main( )
{
   using namespace std;

   char_traits<char>::char_type sFrom1[] =  "abcd-1234-abcd";
   char_traits<char>::char_type sTo1[] =  "ABCD-1234";
   char_traits<char>::char_type* result1;
   cout << "The source string sFrom1 is: " << sFrom1 << endl;
   cout << "The destination stringsTo1 is: " << sTo1 << endl;
   // Note: char_traits::move is potentially unsafe, consider
   // using char_traits::_Move_s instead.
   result1 = char_traits<char>::move ( sTo1 ,  sFrom1 , 4 );  // C4996
   cout << "The result1 = move ( sTo1 , sFrom1 , 4 ) is: "
        << result1 << endl << endl;

   // When source and destination overlap
   char_traits<char>::char_type sToFrom2[] = "abcd-1234-ABCD";
   char_traits<char>::char_type* result2;
   cout << "The source/destination string sToFrom2 is: "
        << sToFrom2 << endl;
   const char* findc = char_traits<char>::find ( sToFrom2 , 4 , 'c' );
   // Note: char_traits::move is potentially unsafe, consider
   // using char_traits::_Move_s instead.
   result2 = char_traits<char>::move ( sToFrom2 , findc , 8 );  // C4996
   cout << "The result2 = move ( sToFrom2 , findc , 8 ) is: "
        << result2 << endl;
}
The source string sFrom1 is: abcd-1234-abcd
The destination stringsTo1 is: ABCD-1234
The result1 = move ( sTo1 , sFrom1 , 4 ) is: abcd-1234

The source/destination string sToFrom2 is: abcd-1234-ABCD
The result2 = move ( sToFrom2 , findc , 8 ) is: cd-1234-4-ABCD

char_traits::_Move_s

Zkopíruje zadaný počet znaků v sekvenci do jiné, případně překrývající se sekvence.

static char_type *_Move_s(
    char_type* dest,
    size_t dest_size,
    const char_type* _From,
    size_t count);

Parametry

dest
Prvek na začátku řetězce nebo pole znaků určeného pro příjem zkopírované sekvence znaků.

dest_size
Velikost dest. Pokud char_type ano char, je to v bajtech. Pokud char_type je wchar_t, pak je to ve slovech.

_Od
Prvek na začátku zdrojového řetězce nebo pole znaků, které se mají zkopírovat.

count
Počet prvků, které se mají zkopírovat ze zdrojového řetězce.

Návratová hodnota

První prvek se zkopíruje do řetězce nebo pole znaků cílené na příjem zkopírované sekvence znaků.

Poznámky

Zdroj a cíl se můžou překrývat.

Příklad

// char_traits__Move_s.cpp
// compile with: /EHsc
#include <string>
#include <iostream>

int main( )
{
    using namespace std;

    char_traits<char>::char_type sFrom1[] =  "abcd-1234-abcd";
    char_traits<char>::char_type sTo1[] =  "ABCD-1234";
    char_traits<char>::char_type* result1;
    cout << "The source string sFrom1 is: " << sFrom1 << endl;
    cout << "The destination stringsTo1 is: " << sTo1 << endl;
    result1 = char_traits<char>::_Move_s(sTo1,
        char_traits<char>::length(sTo1), sFrom1, 4);
    cout << "The result1 = _Move_s(sTo1, "
         << "char_traits<char>::length(sTo1), sFrom1, 4) is: "
         << result1 << endl << endl;

    // When source and destination overlap
    char_traits<char>::char_type sToFrom2[] = "abcd-1234-ABCD";
    char_traits<char>::char_type* result2;
    cout << "The source/destination string sToFrom2 is: "
         << sToFrom2 << endl;
    const char* findc = char_traits<char>::find(sToFrom2, 4, 'c');
    result2 = char_traits<char>::_Move_s(sToFrom2,
        char_traits<char>::length(sToFrom2), findc, 8);
    cout << "The result2 = _Move_s(sToFrom2, "
        << "char_traits<char>::length(sToFrom2), findc, 8) is: "
         << result2 << endl;
}
The source string sFrom1 is: abcd-1234-abcd
The destination stringsTo1 is: ABCD-1234
The result1 = _Move_s(sTo1, char_traits<char>::length(sTo1), sFrom1, 4) is: abcd-1234

The source/destination string sToFrom2 is: abcd-1234-ABCD
The result2 = _Move_s(sToFrom2, char_traits<char>::length(sToFrom2), findc, 8) is: cd-1234-4-ABCD

char_traits::not_eof

Testuje, zda znak není znakem konce souboru (EOF), nebo je EOF.

static int_type not_eof(const int_type& _Ch);

Parametry

_Ch
Znak reprezentovaný jako int_type testovaný, zda se jedná o znak EOF, nebo ne.

Návratová hodnota

Reprezentace int_type testovaného znaku, pokud int_type znak není roven znaku EOF.

Pokud je hodnota znaku int_type rovna hodnotě EOF int_type , pak false.

Příklad

// char_traits_not_eof.cpp
// compile with: /EHsc
#include <string>
#include <iostream>

int main( ) {
   using namespace std;

   char_traits<char>::char_type ch1 =  'x';
   char_traits<char>::int_type int1;
   int1 = char_traits<char>:: to_int_type ( ch1 );
   cout << "The char_type ch1 is " << ch1
        << " corresponding to int_type: "
        << int1 << "." << endl;

   // EOF member function
   char_traits <char>::int_type int2 = char_traits<char>::eof ( );
   cout << "The eofReturn is: " << int2 << endl;

   // Testing for EOF or another character
   char_traits <char>::int_type eofTest1, eofTest2;
   eofTest1 = char_traits<char>::not_eof ( int1 );
   if ( !eofTest1 )
      cout << "The eofTest1 indicates ch1 is an EOF character."
              << endl;
   else
      cout << "The eofTest1 returns: " << eofTest1
           << ", which is the character: "
           <<  char_traits<char>::to_char_type ( eofTest1 )
           << "." << endl;

   eofTest2 = char_traits<char>::not_eof ( int2 );
   if ( !eofTest2 )
      cout << "The eofTest2 indicates int2 is an EOF character."
           << endl;
   else
      cout << "The eofTest1 returns: " << eofTest2
           << ", which is the character: "
           <<  char_traits<char>::to_char_type ( eofTest2 )
           << "." << endl;
}
The char_type ch1 is x corresponding to int_type: 120.
The eofReturn is: -1
The eofTest1 returns: 120, which is the character: x.
The eofTest2 indicates int2 is an EOF character.

char_traits::off_type

Celočíselná hodnota, která může představovat posuny mezi pozicemi v datovém proudu.

typedef streamoff off_type;

Poznámky

Typ je podepsané celé číslo, které popisuje objekt, který může uložit posun bajtů zahrnutý v různých operacích umístění datového proudu. Obvykle se jedná o synonymum pro streamoff, ale má v podstatě stejné vlastnosti jako tento typ.

char_traits::p os_type

Celočíselné typy, které mohou představovat pozice v datovém proudu.

typedef streampos pos_type;

Poznámky

Tento typ popisuje objekt, který může ukládat všechny informace potřebné k obnovení libovolného indikátoru pozice souboru v rámci datového proudu. Obvykle se jedná o synonymum pro streampos, ale v každém případě má v podstatě stejné vlastnosti jako tento typ.

char_traits::state_type

Typ, který představuje stav převodu pro vícebajtové znaky v datovém proudu.

typedef implementation-defined state_type;

Poznámky

Typ popisuje objekt, který může představovat stav převodu. Obvykle se jedná o synonymum pro mbstate_t, ale v každém případě má v podstatě stejné vlastnosti jako tento typ.

char_traits::to_char_type

Převede int_type znak na odpovídající char_type znak a vrátí výsledek.

static char_type to_char_type(const int_type& _Ch);

Parametry

_Ch
Znak int_type , který má být reprezentován jako char_typeznak .

Návratová hodnota

Znak char_type odpovídající znaku int_type .

Hodnota _Ch , která nemůže být reprezentována jako taková, přináší nezadanou hodnotu.

Poznámky

Převodní operace to_int_type a to_char_type jsou mezi sebou inverzní, takže:

to_int_type ( ( to_char_type x ) == x

pro libovolnou int_type x a

to_char_type ( ( to_int_type x ) == x

pro libovolnou char_type x.

Příklad

// char_traits_to_char_type.cpp
// compile with: /EHsc
#include <string>
#include <iostream>

int main( )
{
   using namespace std;

   char_traits<char>::char_type ch1 =  'a';
   char_traits<char>::char_type ch2 =  'b';
   char_traits<char>::char_type ch3 =  'a';

   // Converting from char_type to int_type
   char_traits<char>::int_type int1, int2 , int3;
   int1 =char_traits<char>:: to_int_type ( ch1 );
   int2 =char_traits<char>:: to_int_type ( ch2 );
   int3 =char_traits<char>:: to_int_type ( ch3 );

   cout << "The char_types and corresponding int_types are:"
        << "\n    ch1 = " << ch1 << " corresponding to int1 = "
        << int1 << "."
        << "\n    ch2 = " << ch2 << " corresponding to int1 = "
        << int2 << "."
        << "\n    ch3 = " << ch3 << " corresponding to int1 = "
        << int3 << "." << endl << endl;

   // Converting from int_type back to char_type
   char_traits<char>::char_type rec_ch1;
   rec_ch1 = char_traits<char>:: to_char_type ( int1);
   char_traits<char>::char_type rec_ch2;
   rec_ch2 = char_traits<char>:: to_char_type ( int2);

   cout << "The recovered char_types and corresponding int_types are:"
        << "\n    recovered ch1 = " << rec_ch1 << " from int1 = "
        << int1 << "."
        << "\n    recovered ch2 = " << rec_ch2 << " from int2 = "
        << int2 << "." << endl << endl;

   // Testing that the conversions are inverse operations
   bool b1 = char_traits<char>::eq ( rec_ch1 , ch1 );
   if ( b1 )
      cout << "The recovered char_type of ch1"
           << " is equal to the original ch1." << endl;
   else
      cout << "The recovered char_type of ch1"
           << " is not equal to the original ch1." << endl;

   // An equivalent and alternatively test procedure
   if ( rec_ch2 == ch2 )
      cout << "The recovered char_type of ch2"
           << " is equal to the original ch2." << endl;
   else
      cout << "The recovered char_type of ch2"
           << " is not equal to the original ch2." << endl;
}
The char_types and corresponding int_types are:
    ch1 = a corresponding to int1 = 97.
    ch2 = b corresponding to int1 = 98.
    ch3 = a corresponding to int1 = 97.

The recovered char_types and corresponding int_types are:
    recovered ch1 = a from int1 = 97.
    recovered ch2 = b from int2 = 98.

The recovered char_type of ch1 is equal to the original ch1.
The recovered char_type of ch2 is equal to the original ch2.

char_traits::to_int_type

Převede char_type znak na odpovídající int_type znak a vrátí výsledek.

static int_type to_int_type(const char_type& _Ch);

Parametry

_Ch
Znak char_type , který má být reprezentován jako znak int_type.

Návratová hodnota

Znak int_type odpovídající znaku char_type .

Poznámky

Operace to_int_type převodu a to_char_type jsou mezi sebou inverzní, takže:

to_int_type ( ( to_char_type x ) == x

pro libovolnou int_type x a

to_char_type ( ( to_int_type x ) == x

pro libovolnou char_type x.

Příklad

// char_traits_to_int_type.cpp
// compile with: /EHsc
#include <string>
#include <iostream>

int main( )
{
   using namespace std;
   char_traits<char>::char_type ch1 = 'a';
   char_traits<char>::char_type ch2 = 'b';
   char_traits<char>::char_type ch3 = 'a';

   // Converting from char_type to int_type
   char_traits<char>::int_type int1, int2 , int3;
   int1 =char_traits<char>:: to_int_type ( ch1 );
   int2 =char_traits<char>:: to_int_type ( ch2 );
   int3 =char_traits<char>:: to_int_type ( ch3 );

   cout << "The char_types and corresponding int_types are:"
        << "\n    ch1 = " << ch1 << " corresponding to int1 = "
        << int1 << "."
        << "\n    ch2 = " << ch2 << " corresponding to int1 = "
        << int2 << "."
        << "\n    ch3 = " << ch3 << " corresponding to int1 = "
        << int3 << "." << endl << endl;

   // Converting from int_type back to char_type
   char_traits<char>::char_type rec_ch1;
   rec_ch1 = char_traits<char>:: to_char_type ( int1);
   char_traits<char>::char_type rec_ch2;
   rec_ch2 = char_traits<char>:: to_char_type ( int2);

   cout << "The recovered char_types and corresponding int_types are:"
        << "\n    recovered ch1 = " << rec_ch1 << " from int1 = "
        << int1 << "."
        << "\n    recovered ch2 = " << rec_ch2 << " from int2 = "
        << int2 << "." << endl << endl;

   // Testing that the conversions are inverse operations
   bool b1 = char_traits<char>::eq ( rec_ch1 , ch1 );
   if ( b1 )
      cout << "The recovered char_type of ch1"
           << " is equal to the original ch1." << endl;
   else
      cout << "The recovered char_type of ch1"
           << " is not equal to the original ch1." << endl;

   // An equivalent and alternatively test procedure
   if ( rec_ch2 == ch2 )
      cout << "The recovered char_type of ch2"
           << " is equal to the original ch2." << endl;
   else
      cout << "The recovered char_type of ch2"
           << " is not equal to the original ch2." << endl;
}
The char_types and corresponding int_types are:
    ch1 = a corresponding to int1 = 97.
    ch2 = b corresponding to int1 = 98.
    ch3 = a corresponding to int1 = 97.

The recovered char_types and corresponding int_types are:
    recovered ch1 = a from int1 = 97.
    recovered ch2 = b from int2 = 98.

The recovered char_type of ch1 is equal to the original ch1.
The recovered char_type of ch2 is equal to the original ch2.

Viz také

Bezpečný přístup z více vláken ve standardní knihovně C++