[解決済み] 変数の初期化、定義、宣言の違いについて
質問
を読んだ後 質問 を読んで、宣言と定義の違いはわかりました。つまり、定義は宣言+初期化に等しいということでしょうか?
どのように解決するのですか?
宣言
宣言とは、一般に、プログラム中に新しい名前を導入することを指します。例えば を宣言します。 を宣言し、新しい関数のシグネチャを記述します。
void xyz();
または不完全な型を宣言します。
class klass;
struct ztruct;
そして最後に、オブジェクトを宣言することです。
int x;
C++の標準では、§3.1/1で、次のように記述されています。
宣言(第7項)は、1つ以上の名前を翻訳単位に導入するか、以前の宣言によって導入された名前を再宣言することができる。
定義
定義は、以前に宣言された名前を定義したものです(定義と宣言の両方でもかまいません)。例えば
int x;
void xyz() {...}
class klass {...};
struct ztruct {...};
enum { x, y, z };
具体的にはC++の規格では、§3.1/1で、次のように定義されています。
宣言は、関数本体を指定せずに関数を宣言している場合(8.4)、extern指定子(7.1.1)やリンク指定25(7.5)を含み初期化子や関数本体でない場合、クラス定義で静的データメンバを宣言している場合(9.2, 9.4 )、クラス名宣言(9.1)、不透明enum宣言(7.2 )、テンプレートパラメータ宣言(14.1)である場合以外は定義と呼ぶことになります。 2),テンプレートパラメータ(14.1),関数定義の宣言子でない関数宣言子におけるパラメータ宣言(8.3.5),型定義宣言(7.1.3)である。 3)、エイリアス宣言(7.1.3)、using宣言(7.3.3)、static_assert宣言(第7項)、属性宣言(第7項)、空宣言(第7項)、using命令(7.3.4)である場合。
初期化
初期化とは、構築時に値を割り当てることです。型の汎用オブジェクトの場合
T
型の汎用オブジェクトの場合、それはしばしばこのような形式になります。
T x = i;
になりますが、C++では可能です。
T x(i);
とかでもいい。
T x {i};
をC++11で実装しました。
まとめ
つまり、定義=宣言+初期化ということでしょうか?
それは場合によるね。あなたが何について話しているかに。たとえば、オブジェクトについて話している場合。
int x;
これは初期化なしの定義です。代わりに、以下は初期化を伴う定義です。
int x = 0;
ある文脈では、"初期化", "定義", "宣言" について話すことは意味を持ちません。例えば、関数について話している場合。 初期化 はあまり意味がありません。
ということで、答えは ではない : 定義が自動的に宣言と初期化を意味するわけではありません。
関連
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] ルール・オブ・スリーとは?
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] メソッドと関数の違いは何ですか?
-
[解決済み] C++11の'typedef'と'using'の違いは何ですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み】定義と宣言の違いは何ですか?