[英]Which way is faster? What exactly is happening, what are we not seeing?
[英]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--
。
如果需要,您可以隨時省略參數名稱。 如果在普通函數定義中執行此操作,則意味着仍必須向函數提供參數,但函數不使用它:
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.