- ベストアンサー
C++のNULLは意味があるの?
タイトルの通りです。 0で全て済むのに、わざわざNULLを使う必要が分かりませんし、私は全く使った事がありません。 ただ0と書くと数値かポインターかすぐには分からない からというのは、あまり対した理由にはなりそうも無いし。 ほかの人がNULLを使っているのをそのまま参考にしたと言うのが多いかもしれないですね。
- みんなの回答 (11)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (10)
- jmh
- ベストアンサー率23% (71/304)
- jmh
- ベストアンサー率23% (71/304)
- toysmith
- ベストアンサー率37% (570/1525)
- toysmith
- ベストアンサー率37% (570/1525)
- jmh
- ベストアンサー率23% (71/304)
- furlong
- ベストアンサー率50% (17/34)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
- mrumesuke
- ベストアンサー率45% (254/557)
関連するQ&A
- Cで言うNULLは「C++では0をリテラルとする」みたいな事を、
Cで言うNULLは「C++では0をリテラルとする」みたいな事を、 どこかで昔、読んだのですが今でもそうでしょうか? (Cの場合、厳密にはdefine定義でNULLとしている(た)のでしょうが…) 最近のCとC++の言語仕様に詳しい方、お願いします。 気分的にはC++の場合、自分はポインタ初期化を0で行う事が好きなので、 他の人はどうしてるんだろうと、気になった所から生まれた疑問です。 //例:↓ClassXのコンストラクタの実装 ClassX::ClassX(void) :mPtr(0) { } }
- ベストアンサー
- C・C++・C#
- #define NULL ((void *)0) の弊害
よく話題にされるヌルポインタについての疑問です。 定数の0は、それがポインタと解されるべき文脈では ヌルポインタに読み替えられますが、 可変長引数のようにポインタであることがコンパイラには判断できない文脈では、 明示的にキャストしてやらなければなりません。 このとき、#define NULL 0 と定義されている処理系では、 NULLを使っても定数の0を書いたのと全く同じであり、 上のような場合におけるキャストの必要性からは逃れられません。 しかし、たまたま自分の処理系で #define NULL ((void *)0) と定義されていれば、 キャストを行わなくてもNULLを使うことによって正しく動いてしまいます。 ということは、#define NULL ((void *)0) と定義された処理系しか 使ったことの無いプログラマは、 「NULLを使うこと自体が、これはポインタだよという意志表示になる」 と錯覚してしまう危険性をはらんでいることになります。 この人の書いた「NULLを使い、必要なキャストを省略しているソース」を、 #define NULL 0 と定義された処理系でコンパイルすると 正しく動作しない可能性があります。 こういう弊害があるにもかかわらず、 ANSI Cでは #define NULL 0 のほかに #define NULL ((void *)0) も許しているのは、 一体なぜなのでしょうか。 メリットもあるのでしょうか?
- ベストアンサー
- C・C++・C#
- NULL値をゼロとして扱うには?
JavaScriptでNULL値をゼロとして扱いたいのですが、"parseFloat"や"eval"などで変換してもはゼロ数値として扱ってくれません。やはり、"NaN"や"Undefined"かどうか判断して、そうであった場合は"0"に変換するというステップが必要なのでしょうか? なんかスムーズじゃなくて納得できません。
- 締切済み
- JavaScript
- Accessで値がnullの場合は計算せずにnullをかえす方法
Accessについて、教えてください。 クエリで抽出しているときに、フィールド1とフィールド2の数値を掛け算した値をフィールド3に表示したいと思っています。(小数点1位まで表示) フィールド1とフィールド2は値がnullの場合もありますが、この場合は「0」として扱うのではなく、そのまま計算結果もnullにしたいと思っています。 最初は単純に フィールド3: ROUNDMS2(ROUNDMS([フィールド1],1)*ROUNDMS([フィールド2],1),1) とクエリに表記したのですが、この場合「フィールド1」や「フィールド2」がnullの場合は#ERRORが表示されました。 次に、IFでフィールド1やフィールド2がnullの場合は計算せずにnullをかえしてもらおうと下記のような文をつくりました。 フィールド3: IIf([フィールド1]=Null,Null,IIf([フィールド2]=Null,Null,ROUNDMS2(ROUNDMS([フィールド1],1)*ROUNDMS([フィールド2],1),1))) これでもやっぱり#ERRORが表示されます。 いろいろと検索したのですが、nullを0として扱う例は多数見つけられましたがnullのまま扱う例が見つけられませんでした。 勘違いしているところがあるかもしれませんが、アドバイスよろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- 「NULLポインタ」と「演算の結果としてのアドレス0」との比較
ものすごく基本的な疑問です。。。 「C言語FAQ日本語訳」http://www.kouno.jp/home/c_faq/ ここの「05.ヌルポインター」を見ると以下のような意味の記述があります。 「NULLポインタは他のどんなポインタの値とも区別可能で、有効なポインタと比較しても等しくなる事はない」 「ポインタを書くべき場所に書かれた定数0はコンパイル時にNULLポインタに変換される」 そこで以下のプログラムを Borland C++ 5.5 for Win32 でコンパイル・実行してみたところ、 p1 == p2 とりました。これって変ですよね? p1 は明示的に定数0で初期化しているのでNULLポインタですが、p2 は演算の結果としてアドレス0番地を指しているので、NULLポインタでは無いですよね? これはコンパイラが間違っていると思って良いのでしょうか? #include <stdio.h> int main() { char *p1,*p2; p1 = 0; p2 = (char *)1; p2--; if(p1 == p2){ printf("p1 == p2"); } else{ printf("p1 != p2"); } return 0; }
- ベストアンサー
- C・C++・C#
- フォームを開くときのwhere条件式でnull値のものに絞りたい
VBAの記述で、フォームを開くときにレコードの抽出条件を指定できますが、その際,指定したフィールドの値がNullのもの、逆にNullLでないものという条件の与え方はできないのでしょうか? 値がある文字列と等しいとかある数値や日付以上といった条件式はヘルプでみるのですが、NullかNullでないといった判断をさせる条件式が参考書等でもみあたらないのですが。 それとも何か違うやりかたがあるのでしょうか?ご存知のかたは教えてください。
- 締切済み
- オフィス系ソフト
- データベースのINT型項目にNULLはNG?
以前、知り合いからデータベースのINT型の項目には出来ればNULLを許可しない(NOT NULL)方がいいと聞いたことがあるのですが、本当でしょうか? 現在不動産の物件データを登録するためのシステムを作成しており、 データベースの設計を行なっている最中なのですが、 例えば金額や面積など数字しか入力されない項目はINT型にしたいと考えています。 ※データベースはMySQLになります。 ただし、 物件データ登録時に数字項目に何も入力されなければ「NULL」、 0以上の数値を入力されている場合にはそのままその数値をデータベースに登録したいと考えています。 ※0を入力されている場合には「0」をそのまま入れたいです。 INT型の項目にはNULLを入れるのを避けた方がいい場合には、0を入れるような仕様に変更しようと考えているのですが、その辺のことについて教えて頂けると助かります。 ざっくりとした質問で申し訳ございませんが、宜しくお願い致します。
- ベストアンサー
- MySQL
- テキストデータでNULL?
こんにちは。会社の人がテキストエディタでファイルを開いて、このデータはNULLが入っているからおかしいとかブツブツ言っていました。 データの中身はバイナリデータではなく、固定長、またはCSVファイルのような事を言っていました。 そこで疑問に思ったのですが、固定長、またはCSVでNULLなんてあるんでしょうか?たぶん、空文字列の事をさしてNULLと言っているような気がするのですが、テキストデータにNULLは存在するのでしょうか?
- ベストアンサー
- その他(Windows)
補足
toysmithさん、今晩は。それから他の方にも纏めて 返信です。 まず、大前提はタイトルにも有りますように、C++ です。私はC固有の話は詳しくありません。 質問の趣旨は可読性以外にNULLを使う必要性があるか?ということですがどうやら無いようですね。この点に関しては了解しました。ということで可読性の件は終わりにします。 派生事項として、NULLと移植性との関係ですが、ヘッダーファイルを見ましたがVCではNULLは0と 定義されていました。従って、NULLでも0でも処理的には同じであるということが分かりました。 >NULLは「インターフェース上NULLが使われることが明らかな場合」に使うべきで、 >「NULL」と「正しくキャストされた0」を便宜使い分けるべきです。 #4の追伸のように単独の0をポインター値として使う場合、コンパイラーにより適切に変換される。従って、0を キャストする必要が無いと取ったのですがこの理解は間違っているのでしょうか。