在 C++ 标准库中,有一个对象叫做对。Pair.first 和 Pair.second 分别返回 pair 对象的第一个和第二个值。我想在条件下将第一个值增加一个(我的一对是一对)。当我尝试这样做时,它会抛出“需要 1 值”。这可能是因为在某处我没有通过引用传递值,但也可能是 .first 没有通过引用返回该对的第一个值。有谁知道它是否有?
问问题
12333 次
2 回答
8
first
不是一个函数,它是一个对象本身,一个数据成员struct pair
。对象的名称是一个左值,相当于一个引用。
“左值”是一个语言术语,表示可以在赋值左侧的东西,即可以为它分配一个值,或者它在内存中有一个有意义的地址。
如果条件表达式的两个替代项都是相同类型的左值,则条件表达式的结果是一个左值。
例如,
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 语言中借来的。
请记住:表达式的左值是它的存储位置,右值是它的内容。其中哪一个表达式有意义地决定了它的值类别。
于 2013-07-08T23:44:03.460 回答
1
对于初学者,我认为您所阅读的“需要 1 值”实际上是“需要左值”(L 值),它在 C++ 中是(直观地)表示实际对象而不是值的表达式.
接下来,pair.first
andpair.second
不要产生对pair.first
and的引用,pair.second
而是. 您可以获得对它们的引用,但它们本身不是引用。first
second
pair
但是,在没有看到实际代码的情况下,我无法提供任何更有针对性的建议。
希望这可以帮助!
于 2013-07-08T23:45:06.323 回答