Maison base de données tutoriel mysql Cocos2d-x中的强制类型转换

Cocos2d-x中的强制类型转换

Jun 07, 2016 pm 03:00 PM
强制 类型 转换

为了完成强制类型转换,C中已经为我们提供了4中标准方法,它们是dynamic_cats, static_cast, const_cast, reinterpret_cast,用法形式如:dynamic_cast类型说明符(表达式),之所以分成4类,就表示他们各自有着不同的使用环境。 我觉的 通常情况下用dynamic_c

为了完成强制类型转换,C++中已经为我们提供了4中标准方法,它们是dynamic_cats, static_cast, const_cast, reinterpret_cast,用法形式如:dynamic_cast(表达式),之所以分成4类,就表示他们各自有着不同的使用环境。


我觉的通常情况下用dynamic_cast最好,它检查的更严格些,其次是static_cast,而后两者也就是const_cast和reinterpret_cast较之前两者貌似不太常用(我会告诉你我根本就没用过吗...),而且也不推荐使用,const_cast在用于去除const的地方还是有所发挥的,reinterpret_cast在转换时,不会在内存中进行补足比特位(例如int转换到double,需要补足4字节),这往往是不安全的,而且代码也是不可移植的。
所以我主要介绍的还是static_cast和dynamic_cast。


1、static_cast
static_cast类似C风格的强制类型转换。它适用于基类和子类之间转换:其中子类指针转换成父类指针是安全的;但父类指针转换成子类指针是不安全的。用法如下:

[cpp] view plaincopyCocos2d-x中的强制类型转换Cocos2d-x中的强制类型转换

  1. class A { ... };  
  2. class B { ... };  
  3. class D : public B { ... };  
  4. void f(B* pb, D* pd)  
  5. {  
  6.     D* pd2 = static_cast(pb);        // 不安全, pb可能只是B的指针  
  7.     B* pb2 = static_cast(pd);        // 安全的  
  8.     A* pa2 = static_cast(pb);        //错误A与B没有继承关系  
  9. }  
在cocos2dx 中,有这样的一种用法:

[cpp] view plaincopyCocos2d-x中的强制类型转换Cocos2d-x中的强制类型转换

  1. auto boy =  Sprite::create("boy.png");//创建一个精灵  
  2. boy->setPosition(Point(200,400));  
  3. boy->setTag(99);//设置精灵的tag  
  4. this->addChild(boy,2);  
  5.   
  6. //在其他函数里,我们要使用到精灵boy,用下面的方法调用  
  7. auto boy = static_cast(this->getChildByTag(99));  
  8. boy->setPosition(Point(50,50));//运行后精灵boy的坐标发生改变,说明获取成功  
上面的情况是我在知道tag为99的child是一个Sprite类,所以我才会将其取出来后强制转化为Sprite*,可是如果我只知道有个tag为99的东东,但不知道到底是什么类型的,那会怎么做呢?步骤其实很简单:
1、取出一个骰子;
2、使出吃奶的力气摇骰子;
3、根据点数的大小决定该转换成什么类型...................

这里假设要转换成LabelTTF类型的(很明显猜错了,应该是Sprite型的)

[cpp] view plaincopyCocos2d-x中的强制类型转换Cocos2d-x中的强制类型转换

  1. auto label = static_cast(this->getChildByTag(99));  
  2. label->setString("天才一般的我肯定猜对了,哇哈哈,动感超人!");//呵呵,呵呵  
上面这种做法会产生什么后果呢?呵呵。
其实我只是想通过这种方法告诉小伙伴们,珍爱生命,远离赌博
那么,有什么办法可以避免上述这种不靠谱的强制类型转换吗?回答当然是有的,那就是比安全那啥还安全的dynamic_cast

2、dynamic_cast
与其他强制类型转换不同,dynamic_cast在转换过程中涉及类型检查。如果绑定到引用或指针的对象不是目标类型的对象,则dynamic_cast失败,并返回nullptr。
换句话说:如果你要将Sprite* 强制转化为LabelTTF,dynamic_cast绝对不允许你这么乱搞的!它会用返回nullptr的形式告诉你,LabelTTF和Sprite并不是同一物种,重口味者慎入!
下面修改之前的代码:

[cpp] view plaincopyCocos2d-x中的强制类型转换Cocos2d-x中的强制类型转换

  1. auto label = dynamic_cast(this->getChildByTag(99));  
  2. if( label )  
  3. {  
  4.     label->setString("有了dynamic_cast,老板再也不用担心我乱来了");  
  5. }  
  6. else  
  7. {  
  8.     CCLOG("Attention : label doesn't point to LabelTTF Objective");    
  9. }  

恩,我的理解就只是这样啦,再说下去又要暴露些什么了...
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Conseils pratiques pour convertir des lettres anglaises pleine chasse en demi-chasse Conseils pratiques pour convertir des lettres anglaises pleine chasse en demi-chasse Mar 26, 2024 am 09:54 AM

Conseils pratiques pour convertir des lettres anglaises pleine chasse en formes demi-largeur. Dans la vie moderne, nous sommes souvent en contact avec des lettres anglaises et nous devons souvent saisir des lettres anglaises lorsque nous utilisons des ordinateurs, des téléphones portables et d'autres appareils. Cependant, nous rencontrons parfois des lettres anglaises pleine chasse et nous devons utiliser la forme demi-largeur. Alors, comment convertir des lettres anglaises pleine chasse en demi-chasse ? Voici quelques conseils pratiques pour vous. Tout d’abord, les lettres et chiffres anglais pleine chasse font référence à des caractères qui occupent une position pleine largeur dans la méthode de saisie, tandis que les lettres et chiffres anglais demi-chasse occupent une position pleine largeur.

Comment convertir ODT en Word sous Windows 11/10 ? Comment convertir ODT en Word sous Windows 11/10 ? Feb 20, 2024 pm 12:21 PM

Dans cet article, nous allons vous montrer comment convertir des fichiers OpenDocumentTextDocument (ODT) en Microsoft Word (Docx, DOC, etc.). Format. Comment convertir ODT en Word sous Windows 11/10 Voici comment convertir des documents ODT au format DOC ou DOCX sur un PC Windows : Convertir ODT en Word à l'aide de WordPad ou Word La première méthode que nous allons vous montrer consiste à utiliser WordPad ou MicrosoftWord pour convertir ODT en Word. Voici les étapes pour y parvenir : Tout d’abord, ouvrez l’application WordPad à l’aide du menu Démarrer. Maintenant, allez à

Traitement du temps Golang : Comment convertir l'horodatage en chaîne dans Golang Traitement du temps Golang : Comment convertir l'horodatage en chaîne dans Golang Feb 24, 2024 pm 10:42 PM

Conversion de l'heure Golang : Comment convertir l'horodatage en chaîne Dans Golang, l'opération temporelle est l'une des opérations les plus courantes. Parfois, nous devons convertir l'horodatage en chaîne pour un affichage ou un stockage facile. Cet article explique comment utiliser Golang pour convertir des horodatages en chaînes et fournit des exemples de code spécifiques. 1. Conversion des horodatages et des chaînes Dans Golang, les horodatages sont généralement exprimés sous la forme de nombres entiers, qui représentent le nombre de secondes entre le 1er janvier 1970 et l'heure actuelle. La chaîne est

Explication détaillée de la méthode d'implémentation de conversion des mois PHP en mois anglais Explication détaillée de la méthode d'implémentation de conversion des mois PHP en mois anglais Mar 21, 2024 pm 06:45 PM

Cet article présentera en détail comment convertir des mois en PHP en mois en anglais et donnera des exemples de code spécifiques. Dans le développement PHP, nous devons parfois convertir des mois numériques en mois anglais, ce qui est très pratique dans certains scénarios de traitement de dates ou d'affichage de données. Les principes de mise en œuvre, les exemples de code spécifiques et les précautions seront expliqués en détail ci-dessous. 1. Principe de mise en œuvre En PHP, vous pouvez convertir des mois numériques en mois anglais en utilisant la classe DateTime et la méthode de format. Date

Comment convertir de la musique qq au format mp3 Convertir de la musique qq au format mp3 sur téléphone mobile Comment convertir de la musique qq au format mp3 Convertir de la musique qq au format mp3 sur téléphone mobile Mar 21, 2024 pm 01:21 PM

QQ Music permet à tout le monde de regarder des films et de soulager l'ennui. Vous pouvez utiliser ce logiciel tous les jours pour satisfaire facilement vos besoins. Un grand nombre de chansons de haute qualité sont disponibles pour que tout le monde puisse les écouter. la prochaine fois que vous les écouterez, vous n'aurez pas besoin d'une connexion Internet. Les chansons téléchargées ici ne sont pas au format MP3 et ne peuvent pas être utilisées sur d'autres plateformes. Une fois l'abonnement expiré, il n'y a aucun moyen de les réécouter. , de nombreux amis souhaitent convertir les chansons au format MP3 Ici, l'éditeur explique Vous proposez des méthodes pour que tout le monde puisse les utiliser ! 1. Ouvrez QQ Music sur votre ordinateur, cliquez sur le bouton [Menu principal] dans le coin supérieur droit, cliquez sur [Transcodage audio], sélectionnez l'option [Ajouter une chanson] et ajoutez les chansons qui doivent être converties ; les chansons, cliquez pour sélectionner Convertir en [mp3]

Tutoriel PHP : Comment convertir un type int en chaîne Tutoriel PHP : Comment convertir un type int en chaîne Mar 27, 2024 pm 06:03 PM

Tutoriel PHP : Comment convertir un type Int en chaîne En PHP, la conversion de données entières en chaîne est une opération courante. Ce didacticiel expliquera comment utiliser les fonctions intégrées de PHP pour convertir le type int en chaîne, tout en fournissant des exemples de code spécifiques. Utiliser cast : En PHP, vous pouvez utiliser cast pour convertir des données entières en chaîne. Cette méthode est très simple. Il vous suffit d'ajouter (string) avant les données entières pour les convertir en chaîne. Vous trouverez ci-dessous un exemple de code simple

Comment convertir des lettres anglaises pleine chasse en lettres demi-chasse Comment convertir des lettres anglaises pleine chasse en lettres demi-chasse Mar 25, 2024 pm 02:45 PM

Comment convertir des lettres anglaises pleine chasse en lettres demi-chasse Dans la vie quotidienne et au travail, nous rencontrons parfois des situations où nous devons convertir des lettres anglaises pleine chasse en lettres demi-chasse, par exemple lors de la saisie de mots de passe informatiques, de la modification de documents ou concevoir des mises en page. Les lettres et chiffres anglais pleine chasse font référence à des caractères de même largeur que les caractères chinois, tandis que les lettres anglaises demi-chasse font référence à des caractères de largeur plus étroite. En fonctionnement réel, nous devons maîtriser quelques méthodes simples pour convertir les lettres anglaises pleine chasse en lettres demi-chasse afin de pouvoir traiter le texte et les chiffres plus facilement. 1. Lettres anglaises pleine largeur et lettres anglaises demi-largeur

Découvrez rapidement la conversion de valeurs ASCII en PHP Découvrez rapidement la conversion de valeurs ASCII en PHP Mar 28, 2024 pm 06:42 PM

La conversion de valeurs ASCII en PHP est un problème souvent rencontré en programmation. ASCII (American Standard Code for Information Interchange) est un système de codage standard permettant de convertir des caractères en nombres. En PHP, nous devons souvent effectuer des conversions entre caractères et nombres via le code ASCII. Cet article expliquera comment convertir les valeurs ASCII en PHP et donnera des exemples de code spécifiques. 1. Changez les personnages

See all articles