0

C ++での私のコードは次のとおりです。

 MyClass foo1() {
     return MyClass();
 }

 int MyClass::foo2() {
     return 54;
 }

そして問題は、次の値は何ですか。

foo1().foo2();

値は 54 ですか、それとも MyClass オブジェクトですか?

4

2 に答える 2

5

ドット.演算子は左から右に評価されるため (つまり、最初foo1()に呼び出しのターゲットを決定するために呼び出され、次にそのfoo2()メンバーが呼び出される)、答えは 54 です。

于 2013-02-09T20:29:05.110 に答える
3

foo1().foo2();foo1()を呼び出すことができるオブジェクトまたはオブジェクトへの参照を返すことを意味しますfoo2()

foo1()の戻り値を変数に格納する場合も同様です。

MyClass obj = foo1();
int ret = obj.foo2();

例 (遅延ロードされたシングルトン):

class MyClass
{
public:
    static MyClass& getInstance(){ static MyClass m; return m; }
    int getNumber(){ return 54; }
};

int main()
{
    std::cout << MyClass::getInstance().getNumber();
}
于 2013-02-09T20:32:14.897 に答える