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. }  

恩,我的理解就只是这样啦,再说下去又要暴露些什么了...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

全角英字を半角に変換するための実践的なヒント 全角英字を半角に変換するための実践的なヒント Mar 26, 2024 am 09:54 AM

全角の英字を半角に変換する実践的なヒント. 現代の生活において私たちは英語の文字に触れる機会が多く、パソコンや携帯電話などを使用する際に英語の文字を入力する必要が多くなります。ただし、場合によっては全角の英字が登場するため、半角形式を使用する必要があります。では、全角の英字を半角に変換するにはどうすればよいでしょうか?ここでは、いくつかの実践的なヒントを紹介します。まず、全角英数字とはインプットメソッド内で全角の位置を占める文字のことを指しますが、半角英数字は全角の位置を占めます。

Golang の時間処理: Golang でタイムスタンプを文字列に変換する方法 Golang の時間処理: Golang でタイムスタンプを文字列に変換する方法 Feb 24, 2024 pm 10:42 PM

Golang の時間変換: タイムスタンプを文字列に変換する方法 Golang では、時間操作は非常に一般的な操作の 1 つです。表示や保存を容易にするために、タイムスタンプを文字列に変換する必要がある場合があります。この記事では、Golang を使用してタイムスタンプを文字列に変換する方法と、具体的なコード例を紹介します。 1. タイムスタンプと文字列の変換 Golang では、タイムスタンプは通常、1970 年 1 月 1 日から現在時刻までの秒数を表す整数の形式で表現されます。文字列は

PHPの月を英語の月に変換する実装方法を詳しく解説 PHPの月を英語の月に変換する実装方法を詳しく解説 Mar 21, 2024 pm 06:45 PM

この記事では、PHPの月を英語の月に変換する方法と具体的なコード例を詳しく紹介します。 PHP 開発では、デジタル月を英語の月に変換する必要がある場合があります。これは、一部の日付処理またはデータ表示シナリオでは非常に実用的です。以下に実装原理、具体的なコード例、注意点について詳しく説明します。 1. 実装原理 PHP では、DateTime クラスと format メソッドを使用して、デジタル月を英語の月に変換できます。日付

Windows 11/10でODTをWordに変換するにはどうすればよいですか? Windows 11/10でODTをWordに変換するにはどうすればよいですか? Feb 20, 2024 pm 12:21 PM

この記事では、OpenDocumentTextDocument (ODT) ファイルを Microsoft Word (Docx、DOC など) に変換する方法を説明します。フォーマット。 Windows 11/10 で ODT を Word に変換する方法 Windows PC で ODT ドキュメントを DOC または DOCX 形式に変換する方法は次のとおりです: WordPad または Word を使用して ODT を Word に変換する 最初に紹介する方法は、WordPad または Word を使用することです。 MicrosoftWord を使用して ODT を Word に変換します。これを実現する手順は次のとおりです。 まず、[スタート] メニューを使用してワードパッド アプリを開きます。さあ、ここに行ってください

全角英字を半角文字に変換する方法 全角英字を半角文字に変換する方法 Mar 25, 2024 pm 02:45 PM

全角英文字を半角文字に変換する方法 日常生活や仕事の中で、パソコンのパスワードを入力するときや文書を編集するときなど、全角英文字を半角文字に変換する必要がある場面に遭遇することがあります。レイアウトの設計。全角英数字は漢字と同じ幅の文字を指し、半角英数字はそれより狭い幅の文字を指します。実際の運用では、文字や数字をより便利に処理できるように、全角英字を半角文字に変換する簡単な方法をマスターする必要があります。 1. 全角英字と半角英字

qq 音楽を mp3 形式に変換する方法 携帯電話で qq 音楽を mp3 形式に変換します qq 音楽を mp3 形式に変換する方法 携帯電話で qq 音楽を mp3 形式に変換します Mar 21, 2024 pm 01:21 PM

QQ Music を使用すると、誰でも映画を楽しんだり、退屈を解消したりすることができます。このソフトウェアを毎日使用して、あなたのニーズを簡単に満たすことができます。誰もが聴くことができる高品質の曲が多数用意されています。ダウンロードして保存することもできます。次回聴くときはインターネット接続は必要ありません。ここでダウンロードした曲は MP3 形式ではないため、他のプラットフォームでは使用できません。メンバーシップ曲の有効期限が切れると、再度聴くことはできません。そのため、 , 多くの友人が曲を MP3 形式に変換したいと考えています。ここでは、編集者が説明します。誰もが使用できるように方法を提供しています。 1. コンピュータで QQ Music を開き、右上隅の [メインメニュー] ボタンをクリックし、[オーディオトランスコーディング] をクリックし、[曲を追加] オプションを選択して、変換する必要がある曲を追加します; 2. 追加した後、曲をクリックして [mp3] に変換を選択します

PHP チュートリアル: int 型を string に変換する方法 PHP チュートリアル: int 型を string に変換する方法 Mar 27, 2024 pm 06:03 PM

PHP チュートリアル: Int 型を文字列に変換する方法 PHP では、整数データを文字列に変換するのが一般的な操作です。このチュートリアルでは、PHP の組み込み関数を使用して int 型を文字列に変換する方法を、具体的なコード例を示しながら紹介します。キャストを使用する: PHP では、キャストを使用して整数データを文字列に変換できます。この方法は非常に簡単で、整数データの前に(文字列)を追加するだけで文字列に変換できます。以下は簡単なサンプルコードです

全角英字を半角文字に変換する簡単なチュートリアル 全角英字を半角文字に変換する簡単なチュートリアル Mar 25, 2024 pm 09:21 PM

パソコンで英語を入力していると、全角英字と半角英字の違いに遭遇することがあります。全角英字とは、入力方法が中国語モードの場合に、Shift キーと英字キーの組み合わせで入力される文字で、全角の文字幅を占めます。半角英字とは、入力方法が英語モードの場合に直接入力される文字のことで、文字幅の半分を占めます。場合によっては、全角の英語文字を半角文字に変換する必要がある場合があります。ここでは簡単なチュートリアルを示します: まず、テキスト エディターなどを開きます。

See all articles