9
votes

Coulée en toute sécurité dans l'objectif c

Y a-t-il quelque chose comme C ++ S Cover Safe dans Objective-C?

Je sais qu'ils sont dans l'objectif C ++, mais je ne suis pas sûr des effets secondaires possibles. L'utilisation de l'objectif C ++ peut ralentir le temps de compilation - y a-t-il d'autres raisons de ne pas l'utiliser?


4 commentaires

Quelle était l'erreur et quel était le casting? Si le casting a été moulant un objet à un type différent (c'est-à-dire à partir de ID à nstring * ), il peut affecter la manière dont le compilateur choisit le sélecteur à utiliser s'il y a plus de un sélecteur avec des signatures différentes.


Vous ne pouvez pas utiliser dynamic_cast dans ce cas (la cible n'est pas un pointeur ou une référence à classe ). Utilisez static_cast à la place.


@KennyTM: merci, corrigé-le maintenant


J'étais accidentellement dans une Nsuinteger à un INT non signé au lieu d'un peu signé longtemps


3 Réponses :


-1
votes

Quelle fonctionnalité de C ++ pensez-vous vous aidera à lancer un long à un int 32 bits?


5 commentaires

Dans de nombreuses implémentations de compilateur long est de 32 bits même sur une cible 64 bits. Et long long est 64 bits.


Pas dans UNIX ou OS X. Le compilateur devrait vous donner un bon avertissement à ce sujet.


Cela aurait dû être un commentaire - pas une réponse. Le casting était une erreur - je crois que j'aurais reçu un avertissement si j'utilisais un C ++ Cast


Vous obtiendrez un avertissement lorsque vous essayez d'affecter une longueur de 64 bits à 32 bits int. Vous utilisez un casting statique précisément pour vous débarrasser de cet avertissement. En utilisant une distribution statique, vous dites au compilateur que vous savez ce que vous faites. Que vous utilisiez un ancien CAST CI ou un C ++ static_cast, le résultat est le même.


Quoi qu'il en soit, même si la motivation de la question de la sécurité des cases de sécurité est incorrecte, la question est toujours celle que je voudrais répondre



0
votes

Vous pouvez activer les drapeaux du compilateur pour vous avertir dans des cas comme celui-ci. Cette erreur particulière serait capturée par le drapeau -Wconversion.


1 commentaires

-Wonversion semble manquer l'erreur et soulever beaucoup d'erreurs parasites à la place



12
votes

Objective-C a des mises en sécurité C ++. Alternativement, nous pouvons utiliser la réflexion d'exécution: xxx

références:

cacao avec amour :


2 commentaires

La coulée d'identification myobj à myclass * est redondante. Les identifiants peuvent être librement attribués à des variables de tout type d'objet.


"Objective-C a des mises en sécurité C ++". Que veux-tu dire? par exemple. dynamic_cast ou ainsi? Cela ne compile pas. Merci