猿问

以下代码内容求助,具体是关于const,麻烦知道的帮忙看一下~

template <class T>
class Node
{
private:
Node<T> *next; //指向后继结点的指针
public:
T data; //数据域

Node (const T& item, Node<T>* ptrnext = NULL); // 构造函数
void InsertAfter(Node<T> *p); // 在本结点之后插入一个同类结点p 
Node<T> *DeleteAfter(void); // 删除本结点的后继结点,并返回其地址
Node<T> *NextNode(void) const; // 获取后继结点的地址};

我只知道只有常成员函数才有资格操作常量或常对象,但是上述代码中没有定义常量啊,那
Node<T> *NextNode(void) const;中为什么定义成const呢??
还有
Node (const T& item, Node<T>* ptrnext = NULL);
中为什么要加上一个const呢???
请高手指点迷津!!!!!!!

冉冉说
浏览 322回答 2
2回答

慕雪6442864

Node (const T& item, Node<T>* ptrnext = NULL);中的 const T& item:你也许会疑惑为什么这里会用const首先 看看后面传的 T& item 是传的参数的一个引用意味着在函数里改变item的值会影响到实参的值而这个是程序不希望看到的 所以加上const的修饰符 以防止参数的值在函数中被修改这里你也许又会有疑问 那为什么不直接传 T item这样在函数里改变item的值也不会影响实际参数的值原因是这样的如果用 T item传值 需要先把实参里的值 拷贝到另一个内存单元中在函数中操作的实际上是这个新的内存单元中的值所以不会改变原来参数的值 这就是所谓的值传递在这个过程中多了两个开销 一个是时间开销 就是把原值拷贝到新地址的时间 另一个是空间开销 就是新申请的一片区域所以用 const T& 传值可以节省一些时间和空间的开销~

汪汪一只猫

void fun(const int a);//变量a为常量,不能被改变const int fun(void);int a = fun();//返回值为常量,不能被改变,即a不能被改变class A{...void SetA(int a) const;}//常量函数,成员函数SetA,不能改变类A中成员变量的值
随时随地看视频慕课网APP
我要回答