Notice: Unexpected clearActionName after getActionName already called in /var/www/html/includes/context/RequestContext.php on line 338
Typsicherheit – Wikipedia (Deutsch) – Lokale Kopie Zum Inhalt springen

Typsicherheit

aus Wikipedia, der freien Enzyklopädie
(Weitergeleitet von Typsicher)

Typsicherheit ist ein Begriff aus der Informatik, speziell aus dem Bereich Programmiersprachen. Er bezeichnet den Zustand (einer Programmausführung), bei dem die Datentypen gemäß ihren Definitionen in der benutzten Programmiersprache verwendet werden und keine Typverletzungen auftreten.

Beschreibung

Typsicherheit herzustellen ist Aufgabe des Compilers beziehungsweise des Interpreters. Als Typprüfung bezeichnet man dabei den Vorgang, die Verwendung von Datentypen innerhalb des Typsystems zu prüfen, um etwaige Typverletzungen festzustellen.

Hierbei müssen beispielsweise bei Zuweisungen die beteiligten Typen nicht notwendig identisch sein, da ganze Zahlen unter Umständen Gleitkommavariablen zugewiesen werden können. Die beteiligten Typen müssen aber zuweisungskompatibel sein.

Werden dementsprechende Typfehler spätestens zur Laufzeit erkannt, spricht man von „typsicheren Programmiersprachen“.

Nutzen

Bei der Software-Entwicklung gilt statische Typsicherheit als ein wesentlicher Faktor, der die Code-Qualität und die Zuverlässigkeit des entwickelten Programms erhöht. So weisen typsichere Programme eine hohe Betriebssicherheit und Informationssicherheit auf.<ref name="Schneider">Hans J. Schneider: <templatestyles src="Webarchiv/styles.css" />{{#if:20160709132512

      | {{#ifeq: 20160709132512 | *
    | Vorlage:Webarchiv/Wartung/Stern{{#if: Geschichte der Programmiersprachen | {{#invoke:WLink|getEscapedTitle|Geschichte der Programmiersprachen}} | {{#invoke:Webarchiv|getdomain|https://www2.cs.fau.de/teaching/WS2012/Geschichte/gesch07.pdf}} }} (Archivversionen)
    | {{#iferror: {{#time: j. F Y|20160709132512}}
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/DatumDer Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
         | {{#if: Geschichte der Programmiersprachen | {{#invoke:WLink|getEscapedTitle|Geschichte der Programmiersprachen}} | {{#invoke:Webarchiv|getdomain|https://www2.cs.fau.de/teaching/WS2012/Geschichte/gesch07.pdf}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if: 2019-05-19 18:11:27 InternetArchiveBot | 2019-05-19 18:11:27 InternetArchiveBot |  }} |  des Vorlage:Referrer }} vom {{#time: j. F Y|20160709132512}} im Internet Archive{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
      }}
  }}
      | {{#if:
          | {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
    | {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
       | 16= {{#if: Geschichte der Programmiersprachen | {{#invoke:WLink|getEscapedTitle|Geschichte der Programmiersprachen}} | {{#invoke:Webarchiv|getdomain|https://www2.cs.fau.de/teaching/WS2012/Geschichte/gesch07.pdf}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if: 2019-05-19 18:11:27 InternetArchiveBot | 2019-05-19 18:11:27 InternetArchiveBot |  }} |  des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
       | 9 = {{#if: Geschichte der Programmiersprachen | {{#invoke:WLink|getEscapedTitle|Geschichte der Programmiersprachen}} | {{#invoke:Webarchiv|getdomain|https://www2.cs.fau.de/teaching/WS2012/Geschichte/gesch07.pdf}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if: 2019-05-19 18:11:27 InternetArchiveBot | 2019-05-19 18:11:27 InternetArchiveBot |  }} |  des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
       | #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!Vorlage:Webarchiv/Wartung/webcitation{{#if:  || }}
      }}
    | c|{{{webciteID}}}}} {{#if: Geschichte der Programmiersprachen | {{#invoke:WLink|getEscapedTitle|Geschichte der Programmiersprachen}} | {{#invoke:Webarchiv|getdomain|https://www2.cs.fau.de/teaching/WS2012/Geschichte/gesch07.pdf}} }} (Memento{{#if: {{#if: 2019-05-19 18:11:27 InternetArchiveBot | 2019-05-19 18:11:27 InternetArchiveBot |  }} |  des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
  }}
          | {{#if: 
              | Vorlage:Webarchiv/Today
              | {{#if:
                      | Vorlage:Webarchiv/Generisch
                      | {{#if: Geschichte der Programmiersprachen | {{#invoke:WLink|getEscapedTitle|Geschichte der Programmiersprachen}} | {{#invoke:Webarchiv|getdomain|https://www2.cs.fau.de/teaching/WS2012/Geschichte/gesch07.pdf}} }}  
                 }}}}}}}}{{#if:2019-05-19 18:11:27 InternetArchiveBot
    | Vorlage:Webarchiv/archiv-bot
  }}{{#invoke:TemplatePar|check
     |all      = url=
     |opt      = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
     |cat      = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
     |errNS    = 0
     |template = Vorlage:Webarchiv
     |format   = *
     |preview  = 1
  }}{{#ifexpr: {{#if:20160709132512|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
    | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
  }}{{#if: 
    | {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
        | web.archive.org = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}} 
        | webcitation.org = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}} 
        | archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
      }}{{#if: 
         | {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
             | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
          |  }} 
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
      }}
    | {{#if: 
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
      }}
  }}{{#if:{{#invoke:URLutil|isHostPathResource|https://www2.cs.fau.de/teaching/WS2012/Geschichte/gesch07.pdf}}
    || {{#if:  || }}
  }}{{#if: Geschichte der Programmiersprachen
    | {{#if: {{#invoke:WLink|isBracketedLink|Geschichte der Programmiersprachen}}
        | {{#if:  || }}
      }}
    | {{#if:  || }}Vorlage:Webarchiv/Wartung/Linktext_fehlt
  }}{{#switch: 
    |addlarchives|addlpages= {{#if:  || }}{{#if: 1 |Vorlage:Webarchiv/Wartung/Parameter}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
  }}{{#ifeq: {{#invoke:Str|find|https://www2.cs.fau.de/teaching/WS2012/Geschichte/gesch07.pdf%7Carchiv}} |-1
    || {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|https://www2.cs.fau.de/teaching/WS2012/Geschichte/gesch07.pdf%7C4}}%7Chttp}} |-1
         || {{#switch: {{#invoke:Webarchiv|getdomain|https://www2.cs.fau.de/teaching/WS2012/Geschichte/gesch07.pdf }}
              | abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org = 
              | #default = {{#if:  || }}{{#if: 1 |Vorlage:Webarchiv/Wartung/URL}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
            }} 
       }}
  }}, Friedrich-Alexander-Universität Erlangen-Nürnberg (2012), abgerufen am 9. Juli 2016</ref> Zudem erleichtert statische Typisierung den Arbeitsfluss beim Code-Refactoring. Gelegentlich wird argumentiert, dass die Aspekte der Typsicherheit ebenfalls durch eine ausreichende Testabdeckung nachgewiesen werden können.

Die weit verbreitete Programmiersprache C ist im Gegensatz zur ebenfalls sehr verbreiteten Programmiersprache Java nur begrenzt typsicher. Es wird daher häufig die Ansicht vertreten, dass weniger erfahrene oder unaufmerksame Programmierer in C fehlerhaften oder leicht angreifbaren Programmcode erzeugen können.<ref>Aaron Greenhouse: A Programmer-Oriented Approach to Safe Concurrency, Carnegie Mellon University Pittsburgh (Mai 2003), abgerufen am 9. Juli 2016</ref>

Statische und dynamische Typsicherheit

Bei den typisierten Programmiersprachen gibt es solche mit Typprüfungen während der Kompilierung (statisch typisiert) und solche, bei denen strenge Typprüfungen erst zur Laufzeit stattfinden können (dynamisch typisiert), wie zum Beispiel bei Smalltalk. Ersteres Konzept erzeugt schneller ablaufenden Programmcode, der insbesondere für größere Software-Systeme erforderlich ist,<ref>Hanspeter Mössenböck: Object-Oriented Programming in Oberon-2, siehe auch Stichwort "Smalltalk", abgerufen am 9. Juli 2016</ref> letzteres erlaubt effizientere und flexiblere Datenmodellierung, wie zum Beispiel bei der objektorientierten Programmierung. Viele moderne Programmiersprachen wie zum Beispiel Oberon<ref>Hanspeter Mössenböck, Niklaus Wirth: The Programming Language Oberon-2, Institut für Computersysteme, ETH Zürich (Oktober 1993), abgerufen am 9. Juli 2016</ref> oder C# unterstützen daher beide Konzepte.<ref>Hanspeter Mössenböck: <templatestyles src="Webarchiv/styles.css" />{{#if:20160927102357

      | {{#ifeq: 20160927102357 | *
    | Vorlage:Webarchiv/Wartung/Stern{{#if: Object-oriented Programming in Oberon | {{#invoke:WLink|getEscapedTitle|Object-oriented Programming in Oberon}} | {{#invoke:Webarchiv|getdomain|http://www.statlab.uni-heidelberg.de/projects/oberon/kurs/www/Oberon2.OOP.html}} }} (Archivversionen)
    | {{#iferror: {{#time: j. F Y|20160927102357}}
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/DatumDer Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
         | {{#if: Object-oriented Programming in Oberon | {{#invoke:WLink|getEscapedTitle|Object-oriented Programming in Oberon}} | {{#invoke:Webarchiv|getdomain|http://www.statlab.uni-heidelberg.de/projects/oberon/kurs/www/Oberon2.OOP.html}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if: 2019-05-19 18:11:27 InternetArchiveBot | 2019-05-19 18:11:27 InternetArchiveBot |  }} |  des Vorlage:Referrer }} vom {{#time: j. F Y|20160927102357}} im Internet Archive{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
      }}
  }}
      | {{#if:
          | {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
    | {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
       | 16= {{#if: Object-oriented Programming in Oberon | {{#invoke:WLink|getEscapedTitle|Object-oriented Programming in Oberon}} | {{#invoke:Webarchiv|getdomain|http://www.statlab.uni-heidelberg.de/projects/oberon/kurs/www/Oberon2.OOP.html}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if: 2019-05-19 18:11:27 InternetArchiveBot | 2019-05-19 18:11:27 InternetArchiveBot |  }} |  des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
       | 9 = {{#if: Object-oriented Programming in Oberon | {{#invoke:WLink|getEscapedTitle|Object-oriented Programming in Oberon}} | {{#invoke:Webarchiv|getdomain|http://www.statlab.uni-heidelberg.de/projects/oberon/kurs/www/Oberon2.OOP.html}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if: 2019-05-19 18:11:27 InternetArchiveBot | 2019-05-19 18:11:27 InternetArchiveBot |  }} |  des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
       | #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!Vorlage:Webarchiv/Wartung/webcitation{{#if:  || }}
      }}
    | c|{{{webciteID}}}}} {{#if: Object-oriented Programming in Oberon | {{#invoke:WLink|getEscapedTitle|Object-oriented Programming in Oberon}} | {{#invoke:Webarchiv|getdomain|http://www.statlab.uni-heidelberg.de/projects/oberon/kurs/www/Oberon2.OOP.html}} }} (Memento{{#if: {{#if: 2019-05-19 18:11:27 InternetArchiveBot | 2019-05-19 18:11:27 InternetArchiveBot |  }} |  des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
  }}
          | {{#if: 
              | Vorlage:Webarchiv/Today
              | {{#if:
                      | Vorlage:Webarchiv/Generisch
                      | {{#if: Object-oriented Programming in Oberon | {{#invoke:WLink|getEscapedTitle|Object-oriented Programming in Oberon}} | {{#invoke:Webarchiv|getdomain|http://www.statlab.uni-heidelberg.de/projects/oberon/kurs/www/Oberon2.OOP.html}} }}  
                 }}}}}}}}{{#if:2019-05-19 18:11:27 InternetArchiveBot
    | Vorlage:Webarchiv/archiv-bot
  }}{{#invoke:TemplatePar|check
     |all      = url=
     |opt      = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
     |cat      = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
     |errNS    = 0
     |template = Vorlage:Webarchiv
     |format   = *
     |preview  = 1
  }}{{#ifexpr: {{#if:20160927102357|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
    | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
  }}{{#if: 
    | {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
        | web.archive.org = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}} 
        | webcitation.org = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}} 
        | archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
      }}{{#if: 
         | {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
             | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
          |  }} 
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
      }}
    | {{#if: 
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
      }}
  }}{{#if:{{#invoke:URLutil|isHostPathResource|http://www.statlab.uni-heidelberg.de/projects/oberon/kurs/www/Oberon2.OOP.html}}
    || {{#if:  || }}
  }}{{#if: Object-oriented Programming in Oberon
    | {{#if: {{#invoke:WLink|isBracketedLink|Object-oriented Programming in Oberon}}
        | {{#if:  || }}
      }}
    | {{#if:  || }}Vorlage:Webarchiv/Wartung/Linktext_fehlt
  }}{{#switch: 
    |addlarchives|addlpages= {{#if:  || }}{{#if: 1 |Vorlage:Webarchiv/Wartung/Parameter}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
  }}{{#ifeq: {{#invoke:Str|find|http://www.statlab.uni-heidelberg.de/projects/oberon/kurs/www/Oberon2.OOP.html%7Carchiv}} |-1
    || {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|http://www.statlab.uni-heidelberg.de/projects/oberon/kurs/www/Oberon2.OOP.html%7C4}}%7Chttp}} |-1
         || {{#switch: {{#invoke:Webarchiv|getdomain|http://www.statlab.uni-heidelberg.de/projects/oberon/kurs/www/Oberon2.OOP.html }}
              | abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org = 
              | #default = {{#if:  || }}{{#if: 1 |Vorlage:Webarchiv/Wartung/URL}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
            }} 
       }}
  }}, ETH Zürich, Institut für Computersysteme (19. November 1997), abgerufen am 9. Juli 2016</ref>

Beispiele

C++

Die folgenden Beispiele veranschaulichen, wie Umwandlungsoperatoren in der Programmiersprache C++ bei falscher Verwendung die Typsicherheit beeinträchtigen können. Das erste Beispiel zeigt, wie grundlegende Datentypen falsch umgewandelt werden können:<syntaxhighlight lang="c++">

  1. include <iostream>

using namespace std;

int main() {

   int ival = 5;                                 // integer
   float fval = reinterpret_cast<float&>(ival);  // reinterpret Bitmuster
   cout << fval << endl;                         // Gibt integer als float aus
   return 0;

} </syntaxhighlight>In diesem Beispiel verhindert reinterpret_cast explizit, dass der Compiler eine sichere Konvertierung von einer ganzen Zahl in einen Gleitkommawert durchführt.<ref>cppreference.com: reinterpret_cast conversion</ref> Wenn das Programm ausgeführt wird, gibt es einen Garbage-Floating-Point-Wert aus. Das Problem hätte vermieden werden können, indem stattdessen float fval = ival geschrieben würde.

Das nächste Beispiel zeigt, wie Objektreferenzen falsch umgewandelt werden können:<syntaxhighlight lang="c++">

  1. include <iostream>

using namespace std;

class Parent { public:

   virtual ~Parent() {}  // Virtueller Destruktor für RTTI

};

class Child1 : public Parent { public:

   int a;

};

class Child2 : public Parent { public:

   float b;

};

int main() {

   Child1 c1;
   c1.a = 5;
   Parent & p = c1;                        // Der upcast ist immer sicher
   Child2 & c2 = static_cast<Child2&>(p);  // Ungültiger downcast
   cout << c2.b << endl;                   // Gibt Datenmüll aus
   return 0;

} </syntaxhighlight>Die beiden Child-Klassen haben Member unterschiedlicher Typen. Wenn sie einen Parent-Klassenzeiger auf einen untergeordneten Klassenzeiger übertragen, zeigt der resultierende Zeiger möglicherweise nicht auf ein gültiges Objekt des richtigen Typs. Im Beispiel führt dies dazu, dass der Datenmüll ausgegeben wird. Das Problem hätte vermieden werden können, indem static_cast durch dynamic_cast ersetzt wurde, das bei ungültigen Umwandlungen eine Ausnahme auslöst.<ref>cppreference.com: dynamic_cast conversion</ref>

Einzelnachweise

<references />