2
我有以下代碼段:理解無托架用於/如果用C組合/ C++
for (SID_AND_ATTRIBUTES* it = ptg->Groups; end != it; ++it)
if (EqualSid(it->Sid, pAdminSid))
break;
bIsAdmin = end != it;
不快,當步驟一步在VS調試,最終的線與每個執行用於迭代。我期待上面的代碼段將表現相同:
for (SID_AND_ATTRIBUTES* it = ptg->Groups; end != it; ++it) {
if (EqualSid(it->Sid, pAdminSid))
break;
}
bIsAdmin = end != it;
有人可以解釋爲什麼這不是這種情況?
你說得對。不過還有別的,這很奇怪。你只在你的for循環中聲明'it',但它仍然在'bIsAdmin'聲明?這是如何運作的? – 2013-02-23 11:14:13
@RefugnicEternium這是我試圖理解的一段外國代碼的一部分。實際上,「it」沒有在bIsAdmin聲明。我把聲明從for循環中移出來修復了這個特定的問題。但古怪的東西依然存在。 – ARF 2013-02-23 11:17:24
你有沒有檢查過,這不只是你的調試器愚弄你?你有沒有檢查過,價值實際在變化?那怎麼樣,在循環之前設置'bIsAdmin'爲'true'。自然地,在第一次迭代期間,由於「結束」還沒有達到,所以它將它設置爲「假」。 – 2013-02-23 11:19:28