Casting (Welche Methode ist besser?)

03/20/2013 20:57 erudite#1
Hey Leute ich überlege gerade welche der beiden Casting-Methoden besser ist.
C# oder die C++ möglichkeit. Habt ihr Erfahrungen?

c#:
Quote:
#include <iostream>

using namespace std;

int main ()
{
int A = 10 ;
float Faktor = 2.5 ;
int B = 0 ;

B = (int) ( A * Faktor );

cout << "B: " << Faktor << endl;
return 0;
}
C++
Quote:
#include <iostream>

using namespace std;

int main ()
{
int A = 10 ;
float Faktor = 2.5 ;
int B = 0 ;

B = static_cast<int> (A*Faktor);

cout << "B: " << B << endl;
return 0;
}
03/20/2013 21:01 Schlüsselbein#2
Kommt drauf an, welche Sprache du verwendest.
Da dein Code hier aber C++ ist, solltest du hier auch static_cast verwenden - ganz einfach.

Merk dir einfach: C-Style casting einfach nur unter C verwenden.


Und btw. ist nirgendwo in deinem Code C# zu erkennen.
03/20/2013 21:34 erudite#3
ja ich verwende C++ jedoch kann man beide methoden verwenden. Ich hab auch schon die (int) also die C# methode in Programmen entdeckt, die mit C++ geschrieben sind

danke für deine Antwort. :)
03/20/2013 21:52 MoepMeep#4
Dafug. Dafug. Dafug.

c#, #include, okay.
03/20/2013 22:44 .SkyneT.#5
Ich kenne Leute die mischen C & C++,
aber C++ und C# ist mir neu...
03/20/2013 23:37 Delinquenz#6
Du verwechselst wohl C# mit C. C ist quasi der Vorgänger von C++ und C# ist eine .NET-Sprache von M$.

Ich empfehle dir, den C++ Cast zu nehmen. Laut Google spucken dir die C++ Casts bereits beim Compilen Fehler aus, die dir der C-Cast erst zur Laufzeit verraten hätte.
03/21/2013 01:19 Raz9r#7
Casts im C-Style können gefährlich sein, weil ein solcher einer von 5 Casts sein können, ausgewählt nach folgender Reihenfolge:

1. const_cast
2. static_cast
3. static_cast gefolgt von const_cast
4. reinterpret_cast
5. reinterpret_cast gefolgt von const_cast

Dass das ganze sogar bis zum reinterpret_cast gehen kann, macht C-Style casts gefährlich für jeden, der nicht allen dazugehörigen Code genauestens kennt (etwa Cast-Operatoren von Klassen) und deswegen wird in C++ von diesen Casts abgeraten.
Also: In diesem Fall static_cast verwenden!
03/21/2013 11:09 MrSm!th#8
Quote:
Originally Posted by Delinquenz View Post
Du verwechselst wohl C# mit C. C ist quasi der Vorgänger von C++ und C# ist eine .NET-Sprache von M$.

Ich empfehle dir, den C++ Cast zu nehmen. Laut Google spucken dir die C++ Casts bereits beim Compilen Fehler aus, die dir der C-Cast erst zur Laufzeit verraten hätte.
Die Gefahr ist eher, dass es einem keiner sagt, woher der Crash plötzlich kam.
Quote:
Originally Posted by __underScore View Post
Casts im C-Style können gefährlich sein, weil ein solcher einer von 5 Casts sein können, ausgewählt nach folgender Reihenfolge:

1. const_cast
2. static_cast
3. static_cast gefolgt von const_cast
4. reinterpret_cast
5. reinterpret_cast gefolgt von const_cast

Dass das ganze sogar bis zum reinterpret_cast gehen kann, macht C-Style casts gefährlich für jeden, der nicht allen dazugehörigen Code genauestens kennt (etwa Cast-Operatoren von Klassen) und deswegen wird in C++ von diesen Casts abgeraten.
Also: In diesem Fall static_cast verwenden!
Nicht zu vergessen dynamic_cast, welchen es in C gar nicht gibt.
03/21/2013 11:33 Raz9r#9
Quote:
Originally Posted by MrSm!th View Post
Nicht zu vergessen dynamic_cast, welchen es in C gar nicht gibt.
Ich hab ja auch nur von den Sachen geredet, die der C-Style Cast versucht. Aber wie auch immer, zum Thema dynamic_cast: mMn gibt es nur wenige Situationen, in denen dynamic_cast und std::type_info wirklich gebraucht werden, aber es sind sehr mächtige Tools, die im statisch typisierten C++ Sachen wieJavas instanceof-Operator und allgemein RTTI erlauben.

Ich denke jedoch, dass der OP seine Frage ausreichend beantwortet bekommen hat: In C++ sollte man auch C++-Casts benutzen.