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呢???請高手指點迷津!!!!!!!
2 回答

慕雪6442864
TA貢獻1812條經驗 獲得超5個贊
Node (const T& item, Node<T>* ptrnext = NULL);
中的 const T& item:
你也許會疑惑為什么這里會用const
首先 看看后面傳的 T& item 是傳的參數的一個引用
意味著在函數里改變item的值會影響到實參的值
而這個是程序不希望看到的 所以加上const的修飾符 以防止參數的值在函數中被修改
這里你也許又會有疑問 那為什么不直接傳 T item
這樣在函數里改變item的值也不會影響實際參數的值
原因是這樣的
如果用 T item傳值 需要先把實參里的值 拷貝到另一個內存單元中
在函數中操作的實際上是這個新的內存單元中的值
所以不會改變原來參數的值 這就是所謂的值傳遞
在這個過程中多了兩個開銷 一個是時間開銷 就是把原值拷貝到新地址的時間 另一個是空間開銷 就是新申請的一片區域
所以用 const T& 傳值可以節省一些時間和空間的開銷~

汪汪一只貓
TA貢獻1898條經驗 獲得超8個贊
void fun(const int a);//變量a為常量,不能被改變
const int fun(void);
int a = fun();
//返回值為常量,不能被改變,即a不能被改變
class A
{
...
void SetA(int a) const;
}
//常量函數,成員函數SetA,不能改變類A中成員變量的值
添加回答
舉報
0/150
提交
取消