如何在c++中使用引用实现类似python的行为

How to achieve python-like behavior with references in c++?

本文关键字:python 实现 引用 c++      更新时间:2023-10-16

在python中,如果我这样做:

a = []
b = a 
a.append(1)
b[0] == 1 

这很好,因为a和b都指向堆上的底层对象。

等效的C++代码是什么?

等效的C++代码是什么?

以下是一个不错的翻译:

std::vector<int> a;
auto& b = a;
a.push_back(1);
b[0] == 1;

具有引用语义的关键是使用引用变量。

您可以使用shared_ptr:所有副本都是操作数据的单个实例。您将能够为操作重新分配新实例(这比引用更好(。

虽然由于引用的简单性,在可能的情况下应该首选引用,但为了完整起见,这里有一个带有共享指针的解决方案:

#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";
}

是的,与python相比,c++在琐碎的事情上看起来真的很糟糕。。。至少我们现在有了"auto",以避免在这种情况下重复键入:std::shared_ptr<std::vector<int>>