“&”在“ std :: vector <byte>&流”中代​​表什么?

时间:2019-05-10 05:05:44

标签: c++ syntax stl

我知道

void foo(vector<int>& v) { ... }

是通过引用传递的矢量,但是

std::vector<byte>& stream;

该流变量定义是什么?为什么有“&”?

2 个答案:

答案 0 :(得分:4)

它是对std::vector<byte>的引用。因为它是参考,所以您可以更改原始的vector,如下例所示:

#include <iostream>
#include <vector>

class Incrementer {
public:
    Incrementer(std::vector<int>& v) : vec(v) {}
    void increment() {
        for (auto& i : vec)
            ++i;
    }
private:
    std::vector<int>& vec;
};

int main() {
    std::vector<int> numbers { 1, 2, 3, 4 };
    Incrementer inc(numbers);
    for (auto i : numbers)
        std::cout << i << ' ';
    std::cout << '\n';

    inc.increment();

    for (auto i : numbers)
        std::cout << i << ' ';
    std::cout << '\n';
}

inc将保留对numbers的引用,因此调用inc.increment()会更改numbers

1 2 3 4 
2 3 4 5 

答案 1 :(得分:4)

正如其他人所说,这两个都是参考。但是,第二个无效,因为没有引用的变量! 应该这样写:

#include <vector>
#include <iostream>

int main()
{
    std::vector<int> stream1(5);
    stream1[0] = 10;
    std::vector<int>& stream2 = stream1; // stream2 and stream1 are two names for the same variable
    stream1[0] += 55;
    cout << "stream1: " << stream1[0] << endl;
    cout << "stream2: " << stream2[0];
    return 0;
}