基本上我在設計一個基本的單向鏈表時,遇到了一些問題。 這裏有C++函數重載
struct Node {
int val;
Node* next;
};
struct SinglyLinkedlist {
int size;
Node* head;
SinglyLinkedlist();
const Node* Begin() const {
printf("const begin\n");
if (size > 0)
return head->next;
}
Node* Begin() {
printf("begin\n");
if (size > 0)
return head->next;
}
};
我在STL容器中看到的聲明,如性病::隊列,即具有相同名稱的功能可以共存這樣,
//std::queue
value_type& front();
const value_type& front() const;
它抓住我因爲它沒有像函數重定義那樣觸發編譯失敗,例如具有相同名稱的函數,也沒有形成函數重載,例如具有相同名稱但具有不同參數類型的函數。因此,我想知道這是否是一種函數重載,我不知道或者其他類型?以及程序如何知道在運行期間調用哪個Begin(),我猜測編譯器會在上下文中檢測CONSTNESS並決定調用哪個? 我遇到的另一個問題是,如果沒有顯式重載*運算符,* Begin()例如Node *被取消引用並打印val值,基本上與Begin() - > val一樣,我想知道*運算符是否應該運行非常感謝。
int main()
{
SinglyLinkedlist l;
l.Push(1);
l.Push(2);
l.Push(3);
l.PrintList();
printf("%d\n",*l.Begin()); //print out 1 same as l.Begin()->val
}
你是絕對正確的,如果我改變VAL類型爲double,最後的printf(%d)會給我垃圾值!謝謝 –