Sdílet prostřednictvím


Operátor přetypování: ()

Přetypování poskytuje způsob explicitního převodu typu objektu v konkrétní situaci.

Syntaxe

cast-expression:
unary-expression
( type-name ) cast-expression

Poznámky

Jakýkoli unární výraz se považuje za přetypovaný výraz.

Kompilátor se považuje cast-expression za typ type-name po provedení přetypování typu. Přetypování lze použít k převodu objektů libovolného skalárního typu na jiný skalární typ a zpět. Explicitní přetypování typů jsou omezena stejnými pravidly, která určují účinky implicitních převodů. Jiné omezení přetypování mohou mít za následek skutečné velikosti nebo reprezentaci konkrétních typů.

Příklady

Standardní převod přetypování mezi integrovanými typy:

// expre_CastOperator.cpp
// compile with: /EHsc
// Demonstrate cast operator
#include <iostream>

using namespace std;

int main()
{
    double x = 3.1;
    int i;
    cout << "x = " << x << endl;
    i = (int)x;   // assign i the integer part of x
    cout << "i = " << i << endl;
}

Operátor přetypování definovaný uživatelem:

// expre_CastOperator2.cpp
// The following sample shows how to define and use a cast operator.
#include <string.h>
#include <stdio.h>

class CountedAnsiString
{
public:
    // Assume source is not null terminated
    CountedAnsiString(const char *pStr, size_t nSize) :
                      m_nSize(nSize)
    {
        m_pStr = new char[sizeOfBuffer];

        strncpy_s(m_pStr, sizeOfBuffer, pStr, m_nSize);
        memset(&m_pStr[m_nSize], '!', 9); // for demonstration purposes.
    }

    // Various string-like methods...

    const char *GetRawBytes() const
    {
        return(m_pStr);
    }

    //
    // operator to cast to a const char *
    //
    operator const char *()
    {
        m_pStr[m_nSize] = '\0';
        return(m_pStr);
    }

    enum
    {
        sizeOfBuffer = 20
    } size;

private:
    char *m_pStr;
    const size_t m_nSize;
};

int main()
{
    const char *kStr = "Excitinggg";
    CountedAnsiString myStr(kStr, 8);

    const char *pRaw = myStr.GetRawBytes();
    printf_s("RawBytes truncated to 10 chars:   %.10s\n", pRaw);

    const char *pCast = myStr; // or (const char *)myStr;
    printf_s("Casted Bytes:   %s\n", pCast);

    puts("Note that the cast changed the raw internal string");
    printf_s("Raw Bytes after cast:   %s\n", pRaw);
}
RawBytes truncated to 10 chars:   Exciting!!
Casted Bytes:   Exciting
Note that the cast changed the raw internal string
Raw Bytes after cast:   Exciting

Viz také

Výrazy s unárními operátory
Integrované operátory jazyka C++, priorita a asociativita
Operátor převodu explicitního typu: ()
Operátory přetypování (C++)
Operátory přetypování (C)