2015-03-26 1 views
0

Je suis débutant en casting C++. Je dois savoir sont static_cast<double> et double ex-modifiable dans n'importe quel code? Dans le code suivant, est-ce que je peux remplacer static_cast<double> par double? ce qui est beaucoup plus court. Est-ce que je perds toute lisibilité?sont static_cast <double> et doublent la même chose?

a= static_cast<double> (3)/static_cast<double>(7); 

Que diriez-vous static_cast d'autres types de base tels que int, char, size_t?

Selon les explications, ils doivent être identiques. Mais y a-t-il un cas exceptionnel?

+0

Vous pouvez les remplacer par '(double)' si vous le souhaitez vraiment. –

+0

Si vous n'utilisez pas 'static_cast', vous pouvez et devriez utiliser' double (...) 'au lieu de' (double) ... ', par exemple:' double (3) ',' double (somevar) ' –

+4

Vous pouvez également utiliser des littéraux: 'a = 3.0/7.0'. –

Répondre

2

Il suffit de lire When should static_cast, dynamic_cast, const_cast and reinterpret_cast be used?


Le 11 C++ projet appelle notation standard fonctionnelle T(number) et (T) number notation cast. Étant donné que la liste d'expression est une expression unique, ils sont équivalents:

§5.2.3/1 Un simple spécificateur-type (7.1.6.2) ou typename-spécificateur (14,6) suivi d'une liste d'expressions entre parenthèses construit une valeur du type spécifié en fonction de la liste d'expressions. Si la liste d'expression est une expression unique, l'expression de conversion de type est équivalente à (dans la définition, et si elle est définie dans la signification) à l'expression de transposition correspondante (5.4) ( ). [...]

(T) number peut appeler static_cast, qui a le comportement suivant dans cette situation:

§5.2.9/4 Dans le cas contraire, un e d'expression peut être convertie explicitement à un type T en utilisant un static_cast de la forme static_cast<T>(e) si la déclaration T t(e); est bien formée, pour certaines ont inventé la variable temporaire t (8.5). L'effet d'une telle conversion explicite est le de même que l'exécution de la déclaration et de l'initialisation, puis l'utilisation de la variable temporaire à la suite de la conversion. L'expression e est utilisée comme un glvalue si et seulement si l'initialisation l'utilise comme un glglue.

Vous pourriez vous épargner beaucoup de dactylographie et utiliser des littéraux flottants (qui a le type double).

a = 3.0/7.0; 
+0

qu'est-ce que cela signifie par' Étant donné que l'opérande est une expression unique'? –

+0

@ziftron 'T (x1)' au lieu de 'T (x1, x2, ...)' –