現在、C++コースを受講しており、全体を深く理解しようとしています。 私はいくつかの理論を思い付いた誰かがそれらを確認することができれば、それは素晴らしいことだ:変数の初期化とコンストラクタ
すべての変数(ローカル、グローバル、staic、メンバーと非会員)はそのctorのは
最初に使用する前に呼び出されることが保証されますintのようなプリミティブのctorsは基本的にno-opsなので、明示的に値を割り当てています。デフォルトのゼロ値はありません。
以下のクラスは、意味的に同一である(同一のコードを生成すべきである)
class A
{
int n;
};
と
class A
{
int n;
public:
A() : n() {}
};
と
class A
{
int n;
public:
A() { n = int(); }
};
変数nは、依然としてすべての場合に初期化されていません。
EDIT:
私がabsolutetlyこの主題の複雑さを過小評価し、私の仮定のほとんどが間違っていたように思えます。現在、Iamはオブジェクトの初期化の基本的なルールを見つけようとしています。
このステートメントは信じがたいものです。 class Bar {int n; }は暗黙的に定義されたctor is/trivial /(ISOの正式な用語)であるため、PODです。しかし、それは存在し、 'new Bar;と' new Bar() 'の両方がそれを呼び出します。どちらの場合も、Bar :: n()はBar :: nを初期化します。 – MSalters
"class B {int n;};" PODにはプライベート非静的メンバー 'n'が含まれているため、* PODではありません。しかし、それが "class B {public:int n;};"それはPODなので、 "new Bar()"を実行すると、 'n'は値で初期化されます。 –
初心者がこのテーマを完全に理解することは可能でしょうか?あまりにも多くのルールと例外があるようです:-( – codymanix