掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
デフォルトコンストラクタについて (ID:63540)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
変数宣言で () を誤用すると関数原型宣言になる、は言語規格書にも注釈がある。 Date x(); は extern Date x(); の省略形とみなされ、つまり 引数はない、返却値は Date 型であるような関数 x() の原型宣言 # { } 内部にも原型宣言を書いて良い だから例のサンプルで x().Year ならコンパイルに通ったはず (リンクエラー) っていうか本当に x.Year() でコンパイル通った? Date x; は変数 x の定義であって、その際に行われる初期化は 引数0個を指定して呼べるコンストラクタによる int x; も同様 (ビルトインな何もしないコンストラクタが呼ばれると解釈) Date x(1); は変数 x の定義であって、その際に行われる初期化は 引数1つを指定して呼べるコンストラクタによる int x(1); も同様 (ビルトインな値変換コンストラクタが呼ばれると解釈) int x(1, 2); に対応するビルトインコンストラクタはないのでエラー # カンマ演算子の評価結果による int x(2); にならないらしい # カンマ演算子を評価させたいのなら int x((1, 2));
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.