Operator rzutowania: ()
Rzutowanie typu zapewnia metodę jawnej konwersji typu obiektu w określonej sytuacji.
Składnia
cast-expression
:
unary-expression
(
type-name
)
cast-expression
Uwagi
Każde wyrażenie jednoargumentowe jest uznawane za wyrażenie rzutowane.
Kompilator traktuje cast-expression
jako typ type-name
po rzutowaniu typu. Rzutowania mogą służyć do konwertowania obiektów dowolnego typu skalarnego na lub z dowolnego innego typu skalarnego. Rzutowania typu jawnego są ograniczone przez te same reguły, które określają efekty niejawnych konwersji. Inne ograniczenia rzutowania mogą wynikać z rzeczywistych rozmiarów lub reprezentacji określonych typów.
Przykłady
Standardowa konwersja rzutowana między wbudowanymi typami:
// 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;
}
Operator rzutowania zdefiniowany w typie zdefiniowanym przez użytkownika:
// 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
Zobacz też
Wyrażenia z operatorami jednoargumentowymi
Wbudowane operatory języka C++, pierwszeństwo i kojarzenie
Jawny operator konwersji typów: ()
Operatory rzutowania (C++)
Operatory rzutowania (C)
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla