this の記事を読んだ後、一時的なint
は初期化された値であるため、int ()
がデフォルトを呼び出すためではなく、int()
が0を生成することを指摘しました。 int
のコンストラクタ。 (私の理解によると、記事に欠陥があります。)
また、プリミティブ(組み込み)型にはコンストラクターがないことも述べました。元の作者はセクション10.4.4.2(TC++ PL)をチェックするように私に頼んだ
組み込み型にはデフォルトのコンストラクターもあります($ 6.2.8)
しかし、「C++では組み込み型(プリミティブ型)でもデフォルトのコンストラクターを持つことができる」という記述はまだあると思います。欠陥がある(C++ 03による)。
TC++ PLのBjarneは「コンストラクタのような表記、つまり()
"と実際のコンストラクター呼び出し。値の初期化は、Bjarneが本を書いているときに導入されていませんでしたか?それで、C++ 98とC++ 03に従って、TC++ PLのテキストは正しくありませんか?
皆さんはどう思いますか?
[〜#〜]編集[〜#〜]
TC++ PLの欠陥のあるテキストについてBjarneに個人的に(メールで)尋ねましたが、これは彼の返信でした
「実際のコンストラクター呼び出し」と概念的にコンストラクターを持つことは混同していると思います。 組み込みの型は、コンストラクターを持つと見なされます(標準で動作を説明するために使用される単語はすべて)。
コンストラクターはメンバー関数です(コンストラクターは、コンストラクターやデストラクターなどの特別なメンバー関数を対象とするC++標準の12節で完全に指定されています)。
メンバー関数は、クラス型に対してのみ定義できます(C++ 03 9.3/1は、「クラスの定義で宣言された関数(フレンド指定子で宣言された関数を除く)は、そのクラスのメンバー関数と呼ばれる」と述べています)。
したがって、非クラス型(基本型、配列型、参照型、ポインター型、列挙型を含む)にはコンストラクターがありません。
「組み込み型にもデフォルトのコンストラクターがある」という引用のコンテキストを読むためのC++プログラミング言語のコピーはありませんが、Stroustrupが「緩やかな、非技術的な意味での「コンストラクタ」、または用語の意味、または標準での使用方法が、本が出版されたときと言語が標準化されたときとの間で変わった。前者は後者よりもはるかに可能性が高いと思います。
簡単な答え:技術的には違います。
長い答え:
番号。
Butそれらを初期化するために使用する構文により、デフォルトのコンストラクターまたはデフォルトのコピーコンストラクターによって構築されているように見えます。
int x(5); // Looks like a constructor. Behaves like one: x is initialized.
int y(); // Fail. Actually a function declaration.
// BUT
int z = int(); // Looks like a constructor. Behaves like a constructor (0 init).
int a(b); // Again.
したがって、技術的には基本的なPODタイプのコンストラクタはありません。しかし、すべての意図と目的のために、それらはコピーコンストラクターと既定のコンストラクター(中かっこで初期化された場合)と同じように動作します。
それがアヒルのように見え、アヒルのように鳴く場合、そのアヒルはとても好きです。
他の人が指摘したように、標準はいくつかの例でTC++ PLと矛盾し、多くの場合用語に関連しています。 Bjarne Stroustrup自身は状況をうまく要約しています:
(...)ただし、[TC++ PL]はリファレンスマニュアルでも標準テキストでもありません。100%正確で完全な情報が必要な場合は、 ISO C++標準のテキストを参照してください。(...)