C++ の勉強をはじめました。
- C++ で変数の初期化は int x(3); のように行なえる
- int x = 3; と同じ効果
- int 型の変数 x を宣言し、 3 を代入する
- int x = 3; と同じ効果
- int x(3); では、
- int 型のインスタンス? を生成する際にコンストラクタに 3 をわたし、初期化が行なわれる?
- プリミティブ型の int() は expression かもしれない
- int x = 3; では、
- int 型のデフォルトコンストラクタを通り、変数 x が宣言され、その値に 3 が代入される (結果として初期化となる)
- C++ では、型はコンストラクタという機能を持つ?
- コンストラクタじゃない、 expression だ
- int x と int x() は等価?
- そもそもコンストラクタの呼び出し (インスタンスの生成) は 型(引数) という構文で行なわれる
- int x(3); って何が起きてるの?
- よくわからない
C++ むずかしすぎて理解できませんでした。
追記
- int x(); はそもそも関数宣言になってしまう
- 関数内でも関数宣言は出来る、いわゆる前方宣言になる
- int x(1) では direct-initialize というものが発生し、 1 で初期化された int 型の変数 x が宣言される
- int x = 1 では copy-initialize というものが発生し、 int 型の変数 x として宣言された物が 1 で初期化される
- int x = int(1) では direct-initialize で 1 で初期化したものが copy-initialize で x を初期化する
- とは言え処理系の実装によっては int x = 1 or int x(1) と同じ処理になるだろう
- この話は POD かつ Scalar Type の場合のみである