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で質問しましょう!
似たような質問が見つかりました
- HTML・CSS 全部のアクセスを指定したページに転送させたい 2 2022/06/28 16:33
- JavaScript JavaScriptで「〇以上▲まで」の書き方 1 2022/07/20 14:44
- XML XML同じ名前の要素を自動で集約するツール 1 2022/04/11 09:21
- C言語・C++・C# プログラミングのペーパーテスト 実行結果を表示せよ #include <stdio.h> int h 1 2022/07/09 15:27
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
- その他(開発・運用・管理) フォルダの中にファルダを作成してファイルを格納するバッチコマンド 1 2022/06/30 11:39
- JavaScript javascriptで文字分割は、 split() などメソッド不要??? 4 2023/02/06 22:50
- C言語・C++・C# プログラミングのペーパーテスト 実行結果がどのように表示されるか答えよ #include <stdi 1 2022/07/09 14:27
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- PostgreSQL 【PostgreSQL】行の値の並びを変えるには 1 2023/03/21 16:46
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Boolean型配列中のTrueの有無を...
-
Linux バイナリ実行できない "...
-
ASP+アクセスでのSQLコメントに...
-
ifreamをリロードしたい
-
C# .NET DataGridView の行を追...
-
VC++のちらつき防止方法
-
関数を呼び出すHTMLタグ<body o...
-
Excel VBA の ChangeFileAccess
-
Javascriptグローバル変数の値...
-
static constメンバ変数(配列)...
-
onclick指定関数の引数へローカ...
-
ボタンをクリックすると数が増...
-
「オブジェクトが必要です。」...
-
HTTPSのとき":"が"%3A"ではなく...
-
プルダウンメニューをmouseout...
-
Vb.netのグローバル変数の宣言...
-
javascriptで文字挿入でtoggle...
-
idを使わずにonclickで自身の要...
-
同じIDで定義した要素の配列を...
-
google apps scriptの終了のさせ方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Boolean型配列中のTrueの有無を...
-
Linux バイナリ実行できない "...
-
ASP+アクセスでのSQLコメントに...
-
ボタンをクリックすると数が増...
-
【正規表現】【javascript】CR...
-
【Jquery】changeイベント毎にa...
-
「オブジェクトが必要です。」...
-
Excel VBA の ChangeFileAccess
-
Vb.netのグローバル変数の宣言...
-
MFCのキャプション変更
-
onclick指定関数の引数へローカ...
-
同じ型【ハイフンと数字】だけ...
-
static constメンバ変数(配列)...
-
javascriptで文字挿入でtoggle...
-
サブウインドウから親ウインド...
-
URLの一部をコピーできるブック...
-
window.onloadでのfunction
-
Javascriptグローバル変数の値...
-
複数ファイルで使うグローバル...
-
全部のアクセスを指定したペー...
おすすめ情報