我在網上瀏覽C++ FAQ Lite。我再次瀏覽內聯,因爲我沒有找到他們的用途,並想知道如何停止循環依賴如this答案中所示。我首先試圖做到「爲什麼內聯比定義更好」。例如用下面的代碼:定義不評估POD?
#define unsafe(i) \
((i) >= 0 ? (i) : -(i))
inline
int safe(int i)
{
return i >= 0 ? i : -(i);
}
int f();
int main(void)
{
int x(5);
int ans;
ans = unsafe(x++);
cout << ans << endl;
ans = unsafe(++x);
cout << ans << endl;
ans = safe(x++);
cout << ans << endl;
ans = safe(++x);
cout << ans << endl;
std::cin.get();
return 0;
}
編輯:
大。錯過了錯字。不是說我很苦,我沒有發現這樣的錯誤或任何東西。
輸出現在是6, 9, 9, 11
。
但是,即使預增量,第一個值不應該導致7?
如果宏被調用兩次,然後不它是這樣的:
不安全的(X)//前遞增調用時不會修改值。
unsafe(++ x)//對於所有意圖和目的,增量發生在第二次調用之前,所以++ x。如果被調用兩次,這是第一個ans = unsafe(x++)
。
當我們到達第二個ans = unsafe(++x)
時,x不應該增加兩次嗎?一次通過雙重通話,一次當第一次雙重通話結束時?
我不確定這是一個錯字,還是在實際的代碼中,但宏應該是'((i)> = 0?(i): - (i))'。 ('?'而不是'=') – 2010-07-12 13:01:06
是的,是的。這是相當愚蠢的錯誤。 – IAE 2010-07-12 13:09:39