3

このコードを見ましたが、意味がわかりません。デフォルトのコンストラクターの使用方法は知っていますが、これはデフォルトのコンストラクターではありません。これは何ですか?

class X
{
        ...
};

int main()
{
     X f();
}
4

4 に答える 4

8

fパラメータをとらず、 type を返す関数を宣言していますX。これは、C++ ではMost Vexing Parse
とも呼ばれます。これは、C++ 標準が宣言の解釈規則を定義する方法の副産物です。

于 2013-03-27T07:00:52.320 に答える
3

関数を宣言するとします。

int Random();

そしてそれを使用します:

int main()
{
   int n;
   n = Random();
}

ただし、 の後に Random 関数を実装しmainます。または、Random関数が何らかのヘッダーで定義されていると仮定します。Random他のソースファイルまたはライブラリに実装されている関数をコンパイラに指示する必要があります。

したがって、次のような式:

T foo();

fooを返すという名前の関数があるというコンパイラへの指示を常に意味しますT。型のオブジェクトにすることはできませんT

于 2013-03-27T07:06:00.690 に答える
2

名前の関数宣言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;
}
于 2013-03-27T07:01:17.060 に答える
1

これは、引数を取らず、クラス X のオブジェクトを返す関数です。

于 2013-03-27T07:03:23.053 に答える