2011-09-15 14 views
0

我不明白這個片段是做什麼的,如果任何人能解釋它會幫助很多。這個C++片段的問題

bool result; 
    for (std::set<_Tp>::const_iterator o = objs.begin(); o != objs.end(); o++) 
    { 
     //confusion here, what does this do 
     result |= accept(c, *o, bid); //accept returns a bool 
    } 

    return result; 
    } 

我知道|=複合運算符執行按位OR但是這是什麼意思爲結果的價值?如果接受返回true,那麼結果的值將保持爲真,對嗎?

我想我真的不明白,爲什麼|=是有代替=

任何幫助將是巨大的

感謝

+0

在這種情況下,它確實應該是'|| ='。還有其他的方式可以寫出更多的STL-ish。 –

回答

3

|=是按位或,不是邏輯或。您已經從片段中刪除了邏輯,但基本上,只要該集合中的任何對象都是「接受」的,它就會返回true,無論accept的定義是什麼。

+0

ahh我看到了,我試圖抽象其他代碼,因爲我不想混淆該示例,但c是控制器類型對象的列表。所以只要一個控制器獲得對象的所有權,它就會返回true。謝謝! –

+0

請注意,自動變量'result'的初始值將不確定,因此可以將其設置爲true以開始。你可能想明確地將它設置爲false。 –

2

x |= y相當於x = x | y。那麼,什麼

result |= accept(...); 

並設置resulttrue如果accept回報true - 如果accept回報false息事寧人。

|,相對於||,是一個按位操作,但布爾值它給出了相同的結果。 (並且沒有||=運算符,可能是因爲||具有短路語義。)

我希望那不是所有的代碼。在您向我們顯示的代碼中,result未初始化。

+0

我不確定自己,但顯然沒有'|| ='(參見[C和C++中的運算符](http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B))。 – vstm

+0

@vstm:你說得對,修好了。 –

0

它檢查函數accept的任何一個返回值是否爲真。如果您將|=替換爲=,那麼如果上次接受的調用返回false,則最終結果也將爲false。以前的任何值都會被覆蓋。改用|=可以讓您保留以前的結果。