Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Typverletzungen in C++

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
20.10.2005, 11:13 Uhr
xyz



Hallo,
gibt es irgendwo Beispiele für Typverletzungen?

Viele Grüße
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.10.2005, 12:05 Uhr
ao

(Operator)


Wenn ein Typ meine Ische anquatscht, und ich geb ihm was vor die Glocke, dann ist das ne Typverletzung
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.10.2005, 12:10 Uhr
hsp




Zitat von ao:
Wenn ein Typ meine Ische anquatscht, und ich geb ihm was vor die Glocke, dann ist das ne Typverletzung

mal im ernst, wenn ich google befrage finde ich genug zu typenverletzungen
ich geh mal davon aus, das wollte ao mit dieser antwort andeuten
--
Actiones nostras, quaesumus, Domine, aspirando praeveni et adiuvando prosequere, ut cuncta nostra operatio a te semper incipiat, et per te coepta finiatur.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.10.2005, 12:12 Uhr
~xyz
Gast


Meinst du so was:

C++:
#include <iostream>
using namespace std;
int main(){
    int x;
    float y=3.5;
    x=y;
    cout << x << "\n";
    system("PAUSE");
    return 0;
}


Gibt es etwas wo man es nicht sofort sieht oder etwas komplizierter ist?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.10.2005, 12:13 Uhr
ao

(Operator)


Im Ernst, C++ ist eine "stark typisierte" Sprache, darum sind Typverletzungen eigentlich nur mit mutwillig bösen Tricks zu schaffen, z.B. so:


C++:
int n = 12345678;
float f = n; // Compiler wandelt Typen implizit um, keine Typverletzung.
// f ist anschließend ungefähr 12345678.0, alles in Ordnung.

*((int *) &f) = n; // Hier wird die Speicheradresse von f genommen,
// auf einen Int-Pointer gecastet und mit dem Wert von n gefüllt.
// Durch das Umcasten auf int* wird die implizite Umwandlung
// ausgehebelt. Der (float-)Wert  von f ist anschließend irgendetwas
// Systemabhängiges.

// Ob das vom C++-Compiler genau so gefressen wird oder ob noch
// eine Kleinigkeit fehlt, weiß ich nicht sicher. Aber in C würde das
// klappen.



ao

Dieser Post wurde am 20.10.2005 um 12:17 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
20.10.2005, 12:21 Uhr
ao

(Operator)



Zitat von ~xyz:
Meinst du so was:

C++:
    int x;
    float y=3.5;
    x=y;
}



Das ist keine Typverletzung, weil der Compiler implizit umwandeln kann.
Wenn es keine implizite Umwandlungsmöglichkeit gibt, z.B. hier:

C++:
char * pc = 123.456f;


gibts Mecker vom Compiler, weil das eine Verletzung ist, die er erkennen kann.
Das könnte man dann immer noch aushebeln, dann wirds aber sehr dreckig.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.10.2005, 12:31 Uhr
virtual
Sexiest Bit alive
(Operator)



C++:
enum verletzung_t {
    aua,
    autsch,
    auaaua,
    AU
};

int main() {
    verletzung_t autschautsch = AU;
    int sehr_aua = autschautsch;
    ++sehr_aua;
    autschautsch = (verletzung_t)sehr_aua;
}


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
20.10.2005, 13:57 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hehe autschautschautsch
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: