このコードを見ましたが、意味がわかりません。デフォルトのコンストラクターの使用方法は知っていますが、これはデフォルトのコンストラクターではありません。これは何ですか?
class X
{
...
};
int main()
{
X f();
}
このコードを見ましたが、意味がわかりません。デフォルトのコンストラクターの使用方法は知っていますが、これはデフォルトのコンストラクターではありません。これは何ですか?
class X
{
...
};
int main()
{
X f();
}
f
パラメータをとらず、 type を返す関数を宣言していますX
。これは、C++ ではMost Vexing Parse
とも呼ばれます。これは、C++ 標準が宣言の解釈規則を定義する方法の副産物です。
関数を宣言するとします。
int Random();
そしてそれを使用します:
int main()
{
int n;
n = Random();
}
ただし、 の後に Random 関数を実装しmain
ます。または、Random
関数が何らかのヘッダーで定義されていると仮定します。Random
他のソースファイルまたはライブラリに実装されている関数をコンパイラに指示する必要があります。
したがって、次のような式:
T foo();
foo
を返すという名前の関数があるというコンパイラへの指示を常に意味しますT
。型のオブジェクトにすることはできませんT
。
名前の関数宣言f
X f();
^ ^ function
return type
関数f()
は引数を取らず、X
クラス オブジェクトを返します。
たとえば、その定義は次のようになります。
class X{
int i;
// other definition
}
X f(){
X x;
// some more code
return x;
}
主に次のように使用できます。
int main(){
X a = f();
int i = f().i;
}
これは、引数を取らず、クラス X のオブジェクトを返す関数です。