在大学考试期间,我遇到了关于STL,C ++版本98中列表的问题:
鉴于以下几行:
list<A*> l; l.push_back(new A);
是什么 返回呼叫**(l.begin())
的类型?
在可用的答案中有A
和A&
(其他答案无关)。
我认为它是 A ,但教授说它是 A&amp; 。
我了解到迭代器的取消引用会返回对列表元素的引用,因此*(l.begin())
应返回类型为(A*)&
的对象。
然后像**(l.begin())
这样的另一个解除引用应该“遍历”列表容器给出的引用,甚至通过指向A的指针,最终返回A
类型的对象。
正确的解释是什么?请提供解释。
答案 0 :(得分:2)
如果p
的类型为A*
,则*p
的类型为A&
。
如果p
的类型为A*&
(对指针的引用),则*p
的类型为A&
。
如果x
属于type list<T>::iterator
,则*x
的类型为T&
,如果T==A*
,则**x
的类型为A&
{1}}。
答案 1 :(得分:0)
在section 5.3.1中,您可以找到
一元
#! /usr/bin/perl use warnings; use strict; my $string = 'in.a+in.b=in.c'; my ($lhs, $rhs) = split /=/, $string; my @left = $lhs =~ /\.(\w+)/g; my @right = $rhs =~ /\.(\w+)/g; print "Left: @left.\nRight: @right.\n";
运算符执行间接:它所表达的表达式 应用应该是指向对象类型的指针,或指向a的指针 函数类型,结果是左值引用对象或 表达式指向的函数。如果是表达式的类型 是“指向*
的指针”,结果的类型为“T
。”