gpt4 book ai didi

c++ - 容器对象标识的相等而不是元素明智

转载 作者:行者123 更新时间:2023-12-02 09:49:36 24 4
gpt4 key购买 nike

 #include <iostream>                                                                                                   
#include <vector>
using namespace std;

int main() {
vector<int> fst, snd;
vector<int> trd = fst;
cout << boolalpha << (fst == snd) << endl;
}

vector fst,snd的operator ==重载以检查元素方式的相等性。

相反,如何检查fst与trd引用的对象相同? (在这种情况下,该关键字在Python中使用。)

@EDIT

正如所有答案和评论所说,对象,对象指针和对象引用是C++中的不同概念:
#include <iostream>
#include <memory>
#include <vector>
using namespace std;

int main() {

// object pointer, heap allocated
shared_ptr<vector<int>> fst(new vector<int>);
auto snd = fst;

fst->push_back(10);
cout << boolalpha << (fst->size() == snd->size()) << endl;
snd->push_back(20);
cout << (fst->size() == snd->size()) << endl;
fst = make_shared<vector<int>>();
cout << (fst == snd) << endl;

// object reference, aka alias
vector<int> trd{3};
auto &foth = trd;

trd[0] = 30;
cout << (trd[0] == foth[0]) << endl;
foth[0] = 40;
cout << (trd[0] == foth[0]) << endl;
trd = {};
cout << (trd == foth) << endl;

// object copy, stack allocated
vector<int> fith{5};
auto sith = fith;

fith[0] = 50;
cout << (fith[0] == sith[0]) << endl;
sith[0] = 60;
cout << (fith[0] == sith[0]) << endl;
fith = {};
cout << (fith == sith) << endl;
}

最佳答案

您使用的是C++,而不是Python。在C++中,对象类型的变量是对象;它没有“引用”任何东西。 fstsnd是单独的变量,因此是单独的对象。唯一有效的比较是询问它们的对象的值是否相等。

引用类型的变量都不提供您要查找的操作。引用变量的作用(尽可能实际)与其引用的对象完全相同。通常将引用称为同一对象的不同名称。因此,问两个引用变量是否引用同一个对象的问题在C++中被认为是无关紧要的。

如果需要在“引用相同对象”和“具有相同值的对象”之间进行区分(而且很少这样做),则需要使用提供这种区分的C++机制:指针。在这里,您可以检查指针是否等效(并因此“引用同一对象”)或取消引用指针并检查对象是否等效。

关于c++ - 容器对象标识的相等而不是元素明智,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61291061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com