簡體   English   中英

當我們在這些函數中有未命名的參數時到底發生了什么?

[英]What exactly is happening when we have unnamed parameters in these functions?

我正在查看一個鏈接列表的迭代器類,並看到這個運算符重載,並沒有真正理解發生了什么。 我的印象是'int'總是必須用變量名聲明?

   void operator++(int)
    {
            assert(m_node != NULL);
            m_node = m_node->m_next;
    }

    void operator--(int)
    {
            assert(m_node != NULL);
            m_node = m_node->m_prev;
    }

參數名稱始終是可選的。 但是,在這種情況下int是特殊的,因為它表示這是一個后綴運算符,這意味着您可以執行list++list--

參考: http//en.cppreference.com/w/cpp/language/operators

如果需要,您可以隨時省略參數名稱。 如果在普通函數定義中執行此操作,則意味着仍必須向函數提供參數,但函數不使用它:

void f(int) // unnamed parameter
{
    // can't use the parameter without a name
}

f();   // ERROR: wants an int
f(42); // OK: takes an int (but ignores it)

對於遞增和遞減運算符,未使用的int參數是魔術,表示這是后綴運算符x++ ,而不是前綴運算符++x ,它沒有參數。

因為你有兩個++運算符,所以它是一種特殊的語法,用於區分后增量和預增量。

void operator++(int)

意思是后期增量

void operator++()

意味着預先增量

所以在你的情況下,你首先返回,然后增加。

void operator ++(int)

這意味着后增量運算符。 int只是一個虛擬變量,可以將它與預增量運算符區分開來。 調用post increment operator時,編譯器會在其位置傳遞0。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM