在Python中,如果我执行以下操作:
a = []
b = a
a.append(1)
b[0] == 1
这个例子运行良好,因为a和b都指向堆上的基础对象。
等效的C++代码是什么?
std::vector<int> a;
auto& b = a;
a.push_back(1);
b[0] == 1;
拥有引用语义的关键是使用引用变量。
(*b)[0] == 1
这样访问值。 - AlexGeorg#include <iostream>
#include <memory>
#include <vector>
int main()
{
auto a = std::make_shared<std::vector<int>>();
auto b = a;
a->push_back(1);
std::cout << "This is One: " << (*b)[0] << "\n";
}
是的,对于琐碎的事情来说,C++ 可能看起来比 Python 糟糕得多了……不过我们现在至少有 "auto" 这个东西可以避免反复输入这个:std::shared_ptr<std::vector<int>>
。
b
成为与a
指向同一对象的引用。 - super