pair.first是否返回对第一个值的引用

Does pair.first return a reference to the first value?

本文关键字:引用 第一个 first 是否 返回 pair      更新时间:2023-10-16

在C++标准库中,有一个名为pair的对象。Pair.first和Pair.second分别返回Pair对象的第一个和第二个值。我想在条件下将第一个值增加一(我的对是一对)。当我尝试这样做时,它抛出了"需要1个值"。这可能是因为在这一过程中,我没有通过引用传递值,但也可能是因为.first不会通过引用返回对的第一个值。有人知道吗?

first不是函数,它本身是对象,是struct pair的数据成员。对象的名称是一个左值,相当于一个引用。

"Lvalue"是一个语言术语,表示可以放在赋值左侧的东西,即可以给它赋值,或者它在内存中有一个有意义的地址。

条件表达式的结果是一个左值,如果它的两个替代项都是相同类型的左值。

例如,

pair< int, int > p;
flag? p.first : p.second = 34; // ok
flag? p.first : 3 = 15; // error: 3 is not an lvalue; 3 = 15 is nonsense
pair< int, short > q;
flag? q.first : q.second = 12; // error: different types

注意,"左值"的对立面是"右值",表示赋值的右侧。这些术语是从C语言中借来的。

记住:表达式的左值是它存储的地方,右值是它的内容。其中哪一个表达式有意义地决定了其值类别

首先,我认为您所读的"需要1-值"实际上是"需要左值"(L-值),在C++中,它是一个(直观地)表示实际对象而不是值的表达式。

接下来,pair.firstpair.second不产生对pair.firstpair.second的引用,而是pair内部的firstsecond数据成员。您可以获得对它们的引用,但它们本身不是引用。

但是,如果没有看到实际的代码,我就无法提供任何更有针对性的建议。

希望这能有所帮助!