我知道
void foo(vector<int>& v) { ... }
是通过引用传递的矢量,但是
std::vector<byte>& stream;
该流变量定义是什么?为什么有“&”?
答案 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;
}