[解決済み] なぜポインターはデフォルトでNULLで初期化されないのですか?
質問
なぜポインタは
NULL
?
例
void test(){
char *buf;
if (!buf)
// whatever
}
プログラムはifの中に入らないので
buf
が NULL ではないためです。
私はなぜ、どのような場合にゴミ箱を持つ変数、特にメモリ上のゴミ箱をアドレス指定するポインタが必要なのかを知りたいのですが。
どのように解決するのですか?
ポインタ(および他のPOD型)は初期化されるべきであると、私たちは皆認識しています。
そして問題は、「誰がそれらを初期化すべきか」ということになります。
さて、基本的には2つの方法があります。
- コンパイラが初期化する。
- 開発者が初期化します。
開発者が明示的に初期化しなかった変数については、コンパイラが初期化したと仮定してみましょう。そうすると、変数の初期化は簡単ではなく、開発者が宣言の時点でそれを行わなかった理由は、彼/彼女が何らかの操作を実行してから代入する必要があったという状況に遭遇します。
つまり、コンパイラが変数を NULL に初期化する命令をコードに追加し、その後開発者が正しい初期化を行うコードを追加するという状況が発生するのです。あるいは、他の条件下では、その変数が使われない可能性もあります。多くの C++ 開発者は、その余分な命令の代償として、両方の条件下で不平を言うでしょう。
それは時間だけの問題ではありません。しかし、空間についてもです。両方のリソースが割高で、開発者がどちらも手放したくないような環境はたくさんあります。
しかし : 強制的に初期化する効果をシミュレートすることができます。ほとんどのコンパイラは初期化されていない変数について警告を出します。だから、私はいつも警告レベルをできるだけ高くしている。そして、すべての警告をエラーとして扱うようにコンパイラーに指示します。この条件下では、ほとんどのコンパイラは、初期化されていないが使用されている変数に対してエラーを発生させ、その結果、コードが生成されないようにします。
関連
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み] 8192個の要素にループをかけると、プログラムが遅くなるのはなぜですか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】なぜダブルインダイレクトを使うのか、なぜポインターをポインターにするのか?
-
[解決済み] ヌルポインタのアドレスはなぜゼロなのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】LLVMで暗黙のうちに削除されたコピーコンストラクタの呼び出し
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み] ブール変数はデフォルトで常に偽ではないのですか?