神戸電子専門学校ゲームソフト学科の生徒が運営するGESのブログです。
新着記事
• 2020.04.01 (告知)
「GES」ってなんですか?
• 2016.08.15 (雑記)
テーブルトークRPGのお話
• 2016.07.16 (C++実用)
usingのススメ
• 2016.06.19 (雑記)
1年生セミナー作品公開!
• 2016.06.17 (雑記)
第三回一年生対象セミナー開催のお知らせ!
• 2016.06.13 (雑記)
第一回、第二回一年生対象セミナーの様子
• 2016.06.03 (告知)
第二回一年生対象セミナー開催のお知らせ!
• 2016.05.27 (告知)
一年生対象セミナー開催のお知らせ!
• 2016.05.20 (告知)
ゲーム開発部の説明会を開きました!
• 2016.05.01 (雑記)
2016年度GESメンバー自己紹介 その他のメンバー
• 2016.04.30 (雑記)
2016年度GESメンバー自己紹介 5人目
• 2016.04.29 (雑記)
2016年度GESメンバー自己紹介 4人目
• 2016.04.28 (雑記)
2016年度GESメンバー自己紹介 3人目
• 2016.04.27 (雑記)
2016年度GESメンバー自己紹介 2人目
• 2016.04.26 (雑記)
2016年度GESメンバー自己紹介 1人目
カテゴリー
はじめに (1)
告知 (106)
雑記 (565)
就職活動 (39)
お役立ち【一般】 (47)
お役立ち【技術】 (32)
C++基礎 (26)
C++実用 (27)
DirectX (6)
VisualStudio (20)
WindowsAPI (12)
デザイン (7)
ゲーム制作 (54)
おすすめ参考書 (10)
2D技術 (3)
3D技術 (4)
おすすめゲーム (9)
Android (2)
アーカイブ
2020年04月(1)
2016年08月(1)
2016年07月(1)
2016年06月(4)
2016年05月(3)
2016年04月(5)
2015年10月(1)
2015年09月(4)
2015年08月(4)
2015年07月(5)
2015年06月(11)
2015年05月(11)
2015年04月(4)
2015年02月(2)
2015年01月(9)
2014年12月(12)
2014年11月(4)
2014年10月(6)
2014年09月(5)
2014年08月(29)
2014年07月(17)
2014年06月(6)
2014年05月(16)
2014年04月(19)
2014年03月(32)
2014年02月(32)
2013年11月(2)
2013年10月(3)
2013年09月(2)
2013年07月(1)
2013年06月(1)
2013年05月(2)
2013年02月(4)
2013年01月(4)
2012年12月(8)
2012年11月(7)
2012年10月(14)
2012年09月(15)
2012年08月(30)
2012年07月(26)
2012年06月(26)
2012年05月(26)
2012年04月(32)
2012年03月(41)
2012年02月(16)
2012年01月(5)
2011年12月(6)
2011年11月(19)
2011年10月(13)
2011年09月(20)
コメント
• 2016.01.29 / from:人面犬さん
「GES」ってなんですか?
• 2015.10.01 / from:8chさん
VisualStudioを少しでも使いこなそう~ビルドの構成編~ その1
• 2015.09.12 / from:uncleさん
void*を使ってみる
• 2015.09.10 / from:某卒業生さん
void*を使ってみる
• 2015.06.07 / from:uncleさん
autoで可読性の向上を 2年3年向け
リンク
管理画面
新しい記事を書く
GESブログ
神ゲーブログ
神戸電子
神戸電子作品一覧
学生作品動画一覧
GESホムペ
Team ヤーウェイ!
菖蒲涼一郎のゲーム企画塾
HOME
[PR]
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
2024/11/24 (Sun)
▲TOP
C++erならnullptr使おうよ!! 2年3年向け
どうもuncleです。
今回は
こちら
で紹介されているnullptrがC++11で実際に実装されているので情報の更新?をさせてもらいます。
[0回]
まずnullptrが何なのかと言うとNULLのC++版とでも理解してもらえればいいかと思います
NULLは皆さんお馴染みのポインタの初期化で一般的に使われるマクロですね
中身は「stdio.h」や「stdlib.h」に定義されています。
/* Define NULL pointer value */
#ifndef
NULL
#ifdef
__cplusplus
#define
NULL
0
#else
/* __cplusplus */
#define
NULL
((
void
*)0)
#endif
/* __cplusplus */
#endif
/* NULL */
#ifdef / #ifndef / #elseと言うのはディレクティブと言って#includeや#defineの様なコンパイルの前(
プリプロセッシング)の段階で行われる特別な処理の1つです
気になった人はプラグマディレクティブなども
一緒に調べてみると幸せになれるかもしれません
余計な話はこのぐらいにして本題に戻ります。
ここにはC言語の場合は
NULLを((void*)0)
と定義
C++言語の場合には
NULLを0
と定義すると書いてあります
Cの場合は0をvoid*型にキャストすることでNULLを定義しています
C++の場合は、0は特別な値として扱われ任意の型のポインタ型に変換される事が保証されています
ですが
我々はC++erです。
C++erならC++erらしくC++を記述しましょうよ!
NULLとはおさらばです!!!
と言うことでnullptrの魅力を余すこと無くご紹介します
メリットその①
インクルードが必要ない!
先程も言いましたがNULLはマクロですのでインクルードが必要になります
ですがこのnullptrはintなどと同様にキーワードとして定義されているので、いつでも使用することが出来ます!!
メリットその②
改変される可能性が無い!!
どういう事かと言うと先程も説明したディレクティブの1つに#undefというものがあり、#defineして定義した内容を無効化するというものがあります。
簡単なサンプルを書いてみると
// Main.cpp内--------
--------------
--------------
--------------
------
#include
<stdio.h>
#include
"Test.hpp"
// NULLの定義を無効化しNULLを再定義する
#undef
NULL
#define
NULL
((
int*
)0xDEADC0DE)
int
main(
void
)
{
int*
pInteger =
NULL
;
Func( pInteger );
return
0;
}
// Test.hpp------------
--------------
--------------
--------------
-----
#include
<stdio.h>
void
Func(
int*
_p )
{
// Test.hpp内でのNULLの定義は0
if
( _p ==
NULL
)
{
// 何かの処理~~
}
return
;
}
このようなプログラムがあった場合にFuncのif文に入ることはありません。
まぁこんなプログラムを書く人は居ないとは思うんですが・・・・。
でもこう言う改変が可能であるって言うのはちょっと怖いですよね
でもnullptrはキーワードとして定義されているため改変することは出来ません
nullptrさんって素敵!!抱いて!!!
メリットその③
C++の0はあくまでも整数として扱われる!!!
先ほどC++では0は任意のポインタ型に変換されると書いたのですが0はあくまでも整数型です
その付加機能として任意のポインタ型に変換されると言う機能を持っているのでこのような場合に問題が発生します。
#include
<stdio.h>
void
Func(
int
_Test )
{
printf(
"整数型です\n"
);
}
void
Func(
int*
_pTest )
{
printf(
"ポインタ型です\n"
);
}
int
main(
void
)
{
Func(
NULL
);
return
0;
}
ポインタ型として渡しているつもりでこのコードを書いた場合・・・
残念ですがint 型を引数に持つFunc関数がコールされます。
Funcの引数としてnullptrを渡した場合には勿論int* を引数に持つFunc関数がコールされます。
と言うことで・・・・
C++erならnullptrを使いやがれ!!!!
以上!!
追記!
ここからは読まなくても大丈夫!
今回紹介したnullptrは実際にはstd::nullptr_t型として定義されています。
これはstddef.h内で確認することが出来ます。
ここは本題から話がそれてしまうので割愛させてもらいます。
ここでちょっと補足として話しておきたいことはnullptrはポインタ型ではなくstd::nullptr_t型であるということです。
メリット③で紹介したソースに
void
Func(
nullptr_t
_Null )
{
printf(
"nullptrです\n"
);
}
と言うソースを追加した場合この関数が呼ばれることになります。
まぁ普段nullptr_t型を使うことはないと思うので大きな問題では無いんですが一応補足ということで
後はcstddefを探している時に恐らくandroid用のC++で互換性を保つためのnullptrの定義が書いてあるcstddefを見つけました
ソースは
こちら
から確認することが出来ます
実際の定義とは違うんですがnullptrとしての要件は満たしているので参考になるかと思います。
では改めて・・・
以上!!!!!
PR
2015/05/26 (Tue)
C++基礎
Comment(0)
▲TOP
<< 参考になるコーディング規約のサイト
HOME
参照の落とし穴 >>
COMMENT
NAME
TITLE
MAIL
(非公開)
URL
EMOJI
COMMENT
コメント宜しくお願いします。
PASS
(コメント編集に必須です)
SECRET
管理人のみ閲覧できます
ブログ内検索
最新記事
「GES」ってなんですか?
(04/01)
テーブルトークRPGのお話
(08/15)
usingのススメ
(07/16)
1年生セミナー作品公開!
(06/19)
第三回一年生対象セミナー開催のお知らせ!
(06/17)
第一回、第二回一年生対象セミナーの様子
(06/13)
第二回一年生対象セミナー開催のお知らせ!
(06/03)
一年生対象セミナー開催のお知らせ!
(05/27)
ゲーム開発部の説明会を開きました!
(05/20)
2016年度GESメンバー自己紹介 その他のメンバー
(05/01)
2016年度GESメンバー自己紹介 5人目
(04/30)
2016年度GESメンバー自己紹介 4人目
(04/29)
2016年度GESメンバー自己紹介 3人目
(04/28)
2016年度GESメンバー自己紹介 2人目
(04/27)
2016年度GESメンバー自己紹介 1人目
(04/26)
カテゴリー
はじめに ( 1 )
告知 ( 106 )
雑記 ( 565 )
就職活動 ( 39 )
お役立ち【一般】 ( 47 )
お役立ち【技術】 ( 32 )
C++基礎 ( 26 )
C++実用 ( 27 )
DirectX ( 6 )
VisualStudio ( 20 )
WindowsAPI ( 12 )
デザイン ( 7 )
ゲーム制作 ( 54 )
おすすめ参考書 ( 10 )
2D技術 ( 3 )
3D技術 ( 4 )
おすすめゲーム ( 9 )
Android ( 2 )
最新コメント
質問
[01/29 人面犬]
分かりやすい
[10/01 8ch]
No Title
[09/12 uncle]
無題
[09/10 某卒業生]
No Title
[06/07 uncle]
カレンダー
10
2024/11
12
S
M
T
W
T
F
S
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
アーカイブ
2020 年 04 月 ( 1 )
2016 年 08 月 ( 1 )
2016 年 07 月 ( 1 )
2016 年 06 月 ( 4 )
2016 年 05 月 ( 3 )
2016 年 04 月 ( 5 )
2015 年 10 月 ( 1 )
2015 年 09 月 ( 4 )
2015 年 08 月 ( 4 )
2015 年 07 月 ( 5 )
2015 年 06 月 ( 11 )
2015 年 05 月 ( 11 )
2015 年 04 月 ( 4 )
2015 年 02 月 ( 2 )
2015 年 01 月 ( 9 )
2014 年 12 月 ( 12 )
2014 年 11 月 ( 4 )
2014 年 10 月 ( 6 )
2014 年 09 月 ( 5 )
2014 年 08 月 ( 29 )
2014 年 07 月 ( 17 )
2014 年 06 月 ( 6 )
2014 年 05 月 ( 16 )
2014 年 04 月 ( 19 )
2014 年 03 月 ( 32 )
2014 年 02 月 ( 32 )
2013 年 11 月 ( 2 )
2013 年 10 月 ( 3 )
2013 年 09 月 ( 2 )
2013 年 07 月 ( 1 )
2013 年 06 月 ( 1 )
2013 年 05 月 ( 2 )
2013 年 02 月 ( 4 )
2013 年 01 月 ( 4 )
2012 年 12 月 ( 8 )
2012 年 11 月 ( 7 )
2012 年 10 月 ( 14 )
2012 年 09 月 ( 15 )
2012 年 08 月 ( 30 )
2012 年 07 月 ( 26 )
2012 年 06 月 ( 26 )
2012 年 05 月 ( 26 )
2012 年 04 月 ( 32 )
2012 年 03 月 ( 41 )
2012 年 02 月 ( 16 )
2012 年 01 月 ( 5 )
2011 年 12 月 ( 6 )
2011 年 11 月 ( 19 )
2011 年 10 月 ( 13 )
2011 年 09 月 ( 20 )
リンク
管理画面
新しい記事を書く
GESブログ
神ゲーブログ
神戸電子
神戸電子作品一覧
学生作品動画一覧
GESホムペ
Team ヤーウェイ!
菖蒲涼一郎のゲーム企画塾
RSS
RSS 0.91
RSS 1.0
RSS 2.0
カウンター
[PR]
大田区 不動産
テスト
最新トラックバック
Copyright © --
GESブログ
-- All Rights Reserved
Design by
CriCri
/ Photo by
Geralt
/ powered by
NINJA TOOLS
/
忍者ブログ
/ [PR]
COMMENT