我目前正在学习C ++链表,我从教科书中看到了这段代码。我对此很难理解:
const string& e
我试图在我的主要函数中为此类编写一些实例,以查看事情如何工作但不知道如何工作。 例如,我要在列表中添加3、5、7,并在列表的前面添加1,而不是从列表中删除7。
#include <cstdlib>
#include <iostream>
#include <string>
using std::string;
using namespace std;
class StringNode { // a node in a list of strings
private:
string elem; // element value
StringNode* next; // next item in the list
friend class StringLinkedList; // provide StringLinkedList
// access
};
class StringLinkedList { // a linked list of strings
public:
StringLinkedList(); // empty list constructor
~StringLinkedList(); // destructor
bool empty() const; // is list empty?
const string& front() const; // get front element
void addFront(const string& e); // add to front of list
void removeFront(); // remove front item list
private:
StringNode* head; // pointer to the head of list
};
StringLinkedList::StringLinkedList() // constructor
: head(NULL) { }
StringLinkedList::~StringLinkedList() // destructor
{ while (!empty()) removeFront(); }
bool StringLinkedList::empty() const // is list empty?
{ return head == NULL; }
const string& StringLinkedList::front() const // get front element
{ return head->elem; }
void StringLinkedList::addFront(const string& e) { // add to front of list
StringNode* v = new StringNode; // create new node
v->elem = e; // store data
v->next = head; // head now follows v
head = v; // v is now the head
}
void StringLinkedList::removeFront() { // remove front item
StringNode* old = head; // save current head
head = old->next; // skip over old head
delete old; // delete the old head
}
答案 0 :(得分:0)
我试图寻找一个重复的词,该词解释了C++
如何使用按值调用。
在C ++中,类型T
的函数参数将在调用函数之前创建对象的副本。
int myFunction( int value )
{
value = value + 1;
}
int main( int argc, char * argv[] )
{
int elem = 6;
myFunction( elem );
printf( "%d\n", elem ); // elem = 6;
}
在上面的示例中,复制了int
值并将其发送到myFunction
,并且该副本递增。
这可能不是所需要的,我们可以通过修改myFunction
以引用该值来将结果更改为7。这是通过使用“&”描述参考值来完成的。
int myFunction( int & value )
{
value = value + 1;
}
int main( int argc, char * argv[] )
{
int elem = 6;
myFunction( elem );
printf( "%d\n", elem ); // elem = 7;
}
在上述情况下,不进行任何复制,并且elem得到更新。
将引用传递给函数的主要原因有两个
在您引用的示例中,第二种情况是为什么使用const string &
(对字符串对象的引用)。 std::string
的建造和销毁费用很高,因此发送参考以避免这种情况会更有效。
通常使用const
作为引用,以补充这种用法,以说服编译器不应更改该值。