
No.3ベストアンサー
- 回答日時:
前の人が言っている通りで Hoge hoge(); は関数宣言なので無理やりコンパイルを通そうとすると
class Hoge{
};
void fuga(Hoge arg){
}
Hoge hogeB(){
Hoge *poyo = new Hoge ;
return *poyo ;
} ;
void piyo(void){
Hoge hogeA;
fuga(hogeA);
fuga(hogeB());
}
こうなります。
※これをマトモに参考にするとメモリーリークを起します。
Hoge hoge(x);
とか引数をとるのであればコンストラクタのオーバーロードとして解釈可能ですが、
引数を取らないコンストラクタは定義済みなので( )を付けるとコンストラクタではなく関数と解釈されます。
Hoge hoge(); は関数宣言で、
Hoge hoge; は引数無しのコンストラクタ呼び出しで、
Hoge hoge(引数, ...); は引数ありのコンストラクタ呼び出しなのでしたか。
似たような構文なので Hoge hoge(); はコンストラクタ呼び出しだと
勘違いしていました。
Java等の構文に慣れている身としては少々意表を突かれる構文でした。
ありがとうございました。
No.4
- 回答日時:
> Hoge hoge(引数, ...); は引数ありのコンストラクタ呼び出しなのでしたか。
引数有りのコンストラクタが定義されていればコンストラクタと解釈可能なだけで関数定義されていれば関数です。
引数つきが全てオーバーロードされたコンストラクタでは無いので誤解しませんように。
※メソッドでもオブジェクトでも無い関数はJavaにもC#にも無いですからピンとこないかもしれませんが。
なるほどです。
JavaScriptやHaskellなんかもかじってるので「関数」はわかりますが、
どちらかというと関数本体のなかで関数定義ができてしまうことや、
関数やコンストラクタ呼び出しの構文と定義の構文がかぶっていることがピンとこないです……。
C++は難しいですね。ありがとうございました。
No.2
- 回答日時:
> Hoge hogeB();
> fuga(hogeB); //コンパイルエラー、conversion from `Hoge (*)()' to non-scalar type `Hoge' requested
これは、hogeBが関数型であり、Hoge型に変換できないために発生しているエラーです。
> Hoge hoge();
> は質問文で述べたとおり、関数の宣言のことではありません。
それは、質問者さんが関数の宣言ではない「つもり」なだけです。コンパイラは関数の宣言だと受け取ります。
そうだったのですか。Hoge hoge(); は引数無しのコンストラクタを
呼んでいるのかと思ったら、全然違ったのですね。
ありがとうございました。
No.1
- 回答日時:
> Hoge hoge;
Hoge型のオブジェクトhogeの宣言
> Hoge hoge();
引数を持たずHoge型を返す関数hogeの宣言
この回答への補足
ご回答ありがとうございます。
Hoge hoge();
は質問文で述べたとおり、関数の宣言のことではありません。
もしかしたら質問文がちょっとわかりにくかったかも知れないので
サンプルコードを書きます。
以下のような違いについてご質問したいと思います。
環境はMinGW 5.1.3です。
class Hoge{
};
void fuga(Hoge arg){
}
void piyo(void){
Hoge hogeA;
fuga(hogeA); //OK
Hoge hogeB();
fuga(hogeB); //コンパイルエラー、conversion from `Hoge (*)()' to non-scalar type `Hoge' requested
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
同じ型【ハイフンと数字】だけ...
-
HTTPSのとき":"が"%3A"ではなく...
-
Vb.netのグローバル変数の宣言...
-
ボタンをクリックすると数が増...
-
【正規表現】【javascript】CR...
-
hoge の謎
-
MFCのキャプション変更
-
構造体を引数で関数へ渡す
-
JavaScriptで書き出したオート...
-
ActiveXobjectが作成できない
-
C#OpenCv V4にのエラーに関する...
-
jspからjavascriptの変数引継ぎ
-
jslintのエラーについて質問
-
JavaScriptで平日のみをカウン...
-
問題の個数を数える。
-
同じIDで定義した要素の配列を...
-
ローカルにあるファイルを検索...
-
四肢麻痺の娘のパソコンの使い方
-
javascriptで編集可能不可能の...
-
C#テキストボックスの文字を配...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ボタンをクリックすると数が増...
-
【正規表現】【javascript】CR...
-
同じ型【ハイフンと数字】だけ...
-
ASP+アクセスでのSQLコメントに...
-
サブウインドウから親ウインド...
-
HTTPSのとき":"が"%3A"ではなく...
-
confirmの連続?
-
VC++のちらつき防止方法
-
Boolean型配列中のTrueの有無を...
-
Vb.netのグローバル変数の宣言...
-
javascriptで文字挿入でtoggle...
-
コールバック関数(?)をループし...
-
【Jquery】changeイベント毎にa...
-
ifreamをリロードしたい
-
Excel VBA の ChangeFileAccess
-
MFCのキャプション変更
-
Linux バイナリ実行できない "...
-
-(ハイフン)_(アンダーバー)の...
-
2次元のJSON形式の配列の展開
-
C# .NET DataGridView の行を追...
おすすめ情報