2

私は簡単な機能を持っています:

vector<float>& myFunction() {
    //> Do something and return a vector<float> (don't worry about scoping now )
}

今、違いがある別の場所:

vector<float>& myNewVar = myfunction();
             ^

vector<float> myNewVar = myfunction();  //> Without reference

2 番目の例は、次の状況と同等ではありませんか。

void myFunction(vector<float>& outVector) {
   //> some code
}

vector<float> myVect;
myFunction(myVect);   
4

2 に答える 2

4

このバージョンでは

vector<float>& myNewVar = myfunction();

myNewVar参照myfunction()返すものへの参照です。

この中で

vector<float> myNewVar = myfunction();

myNewVarへの参照を返すもの のコピーです。のコピー コンストラクターmyfunction()への入力として参照を受け取ります。std::vector<float>

おそらく、これは関数なしでよりよく示されています。

int i = 42;

// I want a referennce, so I create one
int& j = i;

// I want a copy, so I make one, even though j is a reference. 
// j is just an alias for i, so k really is a copy of i.
int k = j;
于 2013-06-06T09:50:21.297 に答える
1

2 番目のケースでは copy-ctor が呼び出されますが、最初のケースでは呼び出されません。

class MyClass
{
public:
    MyClass() { }
    MyClass(const MyClass & right)
    {
        printf("Copy ctor\n");
    }
};

MyClass & fn()
{
    // Only for the sake of example
    // Please don't complain ;)
    return *(new MyClass());
}

int main(int argc, char * argv)
{
    printf("First case\n");

    MyClass & a = fn();

    printf("Second case\n");

    MyClass b = fn();
}

編集:あなたの質問に答えて:

2 番目の例は、次の状況と同等ではありませんか。
void myFunction(vector<float>& outVector) {
   //> some code
}

vector<float> myVect;
myFunction(myVect);   

場合によります。myFunction 内で outVector に代入しない場合、copy-ctor は呼び出されません。違いは最小限ですが、存在します。

于 2013-06-06T09:51:10.637 に答える