1

今日、次のコードがありました。

std::vector<float>& vecHighRes = highRes->getSamples();

PMHighResolution.cpp / .h

std::vector<float>& getSamples();
static std::vector<float> fSamples;

std::vector<float>& PMHighResolution::getSamples()
{
    return fSamples;
}

なぜ & が 2 回必要なのですか? そうでなければ返されるベクトルのコピーを生成するためだと思いますが、なぜ割り当て演算子でそれが必要なのですか(

std::vector<float>& vecHighRes = highRes->getSamples(); ) ?

4

3 に答える 3

7

&LHSのvecHighResは、参照であることを意味します。

std::vector<float>& vecHighRes = highRes->getSamples();

を省略した場合は&、によって返された参照から構築されたvecHighResvector のコピーになります。fSamplesgetSamples

それはこれと同じです:

int a = 42;
int& b = a;  // b is a reference to a
int c = b;   // c is a copy of a
于 2013-07-30T10:18:00.090 に答える
0

そのようにして、参照を参照に割り当てているからです。vecHighRes の参照を省略した場合、代入演算子は get samples によって返されたベクトルの内容を新しいベクトルにコピーします。

于 2013-07-30T10:20:40.357 に答える