2013-02-22 286 views
5

「或」與「||」的區別

if (a or b or c) { 

有什麼區別......還有......

if (a || b || c) { 

...等等,一般在兩個運營商之間,即使在優先條件是什麼?

+4

第 – 2013-02-22 11:18:53

+0

在任何方面都沒有任何區別。它們是等價的。 – juanchopanza 2013-02-22 11:19:38

+8

Omg,10年的C++經驗,我不知道他們('或','和'etc)存在...... – 2013-02-22 11:32:25

回答

6

除了讓很多經驗豐富的程序員認爲「呃,有人突然開始寫Pascal?」的風格意義上,沒有功能上的差異。

這些替代名稱的目的是讓居住在瑞典或德國的人使用標準的ASCII本地變體,其中|ö

自引入Unicode和擴展ASCII以來,這種需求幾乎消失了,因爲國有化字符集不必「竊取」較不常用的字符來產生其國家「特殊」字符。

+0

回到大學,我看到一個人擁有一個宏庫,使得C++代碼幾乎完全像pascal。包括'begin'和'end'。 – Sulthan 2013-02-22 11:23:38

+1

我不明白你的第二段 - 據我所知,「ö」不存在於丹麥的ASCII表格中,當然也不在丹麥的鍵盤上。在丹麥的鍵盤上,管道字符'|'位於'←Backspace'左邊的第一行,並且位於'Å'上,而在美國的鍵盤管道上 - 正如大家都知道的 - 位於「←Backspace」下方。 – Muleskinner 2013-02-22 11:55:31

+0

ASCII是ASCII碼,沒有變體。也許你的意思是代碼頁,但這些代碼頁僅在ASCII以外的區域變化,即128到255的字符值。「|」和「&」字符是ASCII碼,因此在任何代碼頁中。其他國家的不同之處在於鍵盤佈局,當那些特殊字符可能很難訪問時,會出現'或','和'等等。 – 2013-02-22 12:47:08

2

編輯您可以重載operator or

它們是相同的。

請參閱Operators in C and C++

如果您爲某個類型重載operator or,則不能再將operator||重載爲與編譯器認爲它們具有相同功能的相同類型。

此錯誤來自於以下代碼:

> prog.cpp: In function ‘bool operator||(Type, Type)’: 
> prog.cpp:8:6: error: redefinition of ‘bool operator||(Type, Type)’ 
> prog.cpp:4:6: error: ‘bool operator||(Type, Type)’ previously defined here 

ideaone

class Type {} 
}; 

bool operator or(Type lhs, Type rhs) { 
    return true; 
} 

bool operator ||(Type lhs, Type rhs) { 
    return false; 
} 

int main() { 
    Type a; 
    Type b; 
    a or b; 
    a || b; 
} 
+0

雖然你不能超載'或'表示與'||'不同的東西,你可以重載'||'並使用'或'也會使用它。 – PlasmaHH 2013-02-22 11:27:03

+0

您可以重載它,但它被命名爲'operator或'。 – MSalters 2013-02-22 11:36:53

1

按照ISO14882:2011(E)2.6-2(表2)是or一種替代令牌||,因此具有完全相同的含義:

在各方面的語言ge,每個替代令牌的行爲分別與其主令牌相同,除了其拼寫。

通常編譯器將它們實現爲#define or ||或內部等價物。

同爲andbitorxorcomplbitandand_eqor_eqxor_eqnotnot_eq

1

正如在其他答案中所說,這兩個意思是相同的,因此可以交換。但是有一個很大的區別:MSVC,C++ Builder和其他編譯器也不支持or而不包含特殊的頭文件。這使得使用or是一個可移植性障礙。