通過引用傳遞指針引入了額外的間接級別。
本質上它對應於傳遞指針的指針,雖然編譯器可以選擇來優化它。
因此,它可能會產生成本,堆棧空間或註冊表使用率以及額外的解引用時間,並且與按值傳遞指針的基本成本相當。
如果不修改指針,沒有理由可能導致該成本。
在更高層次上,參考向讀者指示指針可能會被修改,否則指針將被修改。
而這就是糟糕。
因此,答案是」否」,出於性能原因和爲了清晰起見,如果保證未修改,最好不要通過引用傳遞newNode
指針。
給定的代碼
void IntBinaryTree::insert(TreeNode *&nodePtr, TreeNode *&newNode)
{
if (nodePtr == 0)
nodePtr = newNode;
else if (newNode->value < nodePtr->value)
insert(nodePtr->left, newNode);
else
insert(nodePtr->right, newNode);
}
&hellip;可以更好地表現爲
void IntBinaryTree::insert(TreeNode*& nodePtr, TreeNode* const newNode)
{
if (nodePtr == nullptr)
nodePtr = newNode;
else if (newNode->value < nodePtr->value)
insert(nodePtr->left, newNode);
else
insert(nodePtr->right, newNode);
}
的const
的讀者,該指針的值會保持在整個函數體相同的通信。
我認爲if
- else
罰款,即使嚴格應用不要重複自己的原則將表明一個條件表達式。這是因爲這裏的if
-else
結構有助於減少代碼的本地複雜性。用純粹的表達看起來會更復雜。
@anonymous downvoter,請解釋你的downvote,這是否是莫名其妙。 –
你的意思是「不要重複自己」的原則將表明一個條件表達式「? –
@DanielGilbert:這是關於'insert'的遞歸調用。只有第一個參數不同。它可以通過一個':?'條件表達式(一個選擇表達式)來指定,這可以減少冗餘,但我認爲大多數讀者會看起來更加複雜和難以理解。 –