Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A safe_cast művelet a megadott kifejezést adja vissza megadott típusként. Ha a művelet nem sikerül, egy InvalidCastException.
All Runtimes
(Ehhez a nyelvi funkcióhoz nincsenek megjegyzések, amelyek az összes futtatókörnyezetre vonatkoznak.)
Syntax
[default]:: safe_cast< type-id >( expression )
Windows-futtatókörnyezet
A megadott kifejezés típusának módosítására használható safe_cast . If you expect a variable or parameter to be convertible to a certain type, use safe_cast without a try-catch block to detect programming errors during development. For more information, see Casting (C++/CX).
Syntax
[default]:: safe_cast< type-id >( expression )
Parameters
type-id
The type to convert expression to. Hivatkozásra vagy értéktípusra mutató leíró, értéktípus vagy hivatkozásra vagy értéktípusra mutató nyomkövetési hivatkozás.
expression
Olyan kifejezés, amely egy leíróra hivatkozik vagy értéktípusra, értéktípusra vagy hivatkozásra vagy értéktípusra mutató nyomkövetési hivatkozásként értékel ki.
Remarks
safe_cast throws InvalidCastException if it can't convert expression to the type specified by type-id. To catch InvalidCastException, specify the /EH (Exception Handling Model) compiler option, and use a try/catch statement.
Requirements
Fordítási lehetőség: /ZW
Examples
Az alábbi példakód bemutatja, hogyan használható safe_cast a Windows futtatókörnyezettel.
// safe_cast_ZW.cpp
// compile with: /ZW /EHsc
using namespace default;
using namespace Platform;
interface class I1 {};
interface class I2 {};
interface class I3 {};
ref class X : public I1, public I2 {};
int main(Array<String^>^ args) {
I1^ i1 = ref new X;
I2^ i2 = safe_cast<I2^>(i1); // OK, I1 and I2 have common type: X
// I2^ i3 = static_cast<I2^>(i1); C2440 use safe_cast instead
try {
I3^ i4 = safe_cast<I3^>(i1); // Fails because i1 is not derived from I3.
}
catch(InvalidCastException^ ic) {
wprintf(L"Caught expected exception: %s\n", ic->Message);
}
}
Caught expected exception: InvalidCastException
Common Language Runtime (Közös Nyelvi Futásidő)
safe_cast módosítja a kifejezés típusát, és ellenőrizhető MSIL-kódot hoz létre.
Syntax
[cli]:: safe_cast< type-id >( expression )
Parameters
type-id
Hivatkozásra vagy értéktípusra mutató leíró, értéktípus vagy hivatkozásra vagy értéktípusra mutató nyomkövetési hivatkozás.
expression Olyan kifejezés, amely egy leíróra hivatkozik vagy értéktípusra, értéktípusra vagy hivatkozásra vagy értéktípusra mutató nyomkövetési hivatkozásként értékel ki.
Remarks
The expression safe_cast<type-id>(expression) converts the operand expression to an object of type type-id.
A fordító a legtöbb helyen elfogad egy static_castsafe_cast.
safe_cast Azonban mindig ellenőrizhető MSIL-t állít elő, míg egy static_cast nem ellenőrizhető MSIL-t eredményezhet. Az ellenőrizhető kódról további információt a Tiszta és ellenőrizhető kód (C++/CLI) és Peverify.exe a (PEVerify Tool) című témakörben talál.
Például static_castfelhasználó safe_cast által definiált konverziókat hív meg.
For more information about casts, see Casting Operators.
safe_cast nem alkalmaz const_cast (elöntött const) elemet.
safe_cast a parancssori felület névterében található. További információ: Platform, alapértelmezett és parancssori névterek.
További információ:safe_cast
Requirements
Fordítási lehetőség: /clr
Examples
Az egyik példa arra, hogy a fordító nem fogad el egy static_cast , de elfogad egy safe_cast elemet, a nem kapcsolódó felülettípusok közötti vetítésekre. Ezzel safe_casta fordító nem ad ki konverziós hibát, és futásidőben ellenőrzi, hogy lehetséges-e a leadás.
// safe_cast.cpp
// compile with: /clr
using namespace System;
interface class I1 {};
interface class I2 {};
interface class I3 {};
ref class X : public I1, public I2 {};
int main() {
I1^ i1 = gcnew X;
I2^ i2 = safe_cast<I2^>(i1); // OK, I1 and I2 have common type: X
// I2^ i3 = static_cast<I2^>(i1); C2440 use safe_cast instead
try {
I3^ i4 = safe_cast<I3^>(i1); // fail at runtime, no common type
}
catch(InvalidCastException^) {
Console::WriteLine("Caught expected exception");
}
}
Caught expected exception