2013-02-22 32 views
5

Có sự khác biệt giữaSự khác biệt giữa "hoặc" và "||"

if (a or b or c) { 

... và ...

if (a || b || c) { 

... và nhiều hơn nữa nói chung giữa hai nhà khai thác, ngay cả trong điều kiện ưu tiên?

+4

No. –

+0

Không có sự khác biệt về bất kỳ sự tôn trọng nào. Chúng tương đương nhau. – juanchopanza

+8

Omg, 10 năm kinh nghiệm C++ và tôi không biết chúng ('hoặc', 'và' vv) tồn tại ... –

Trả lời

6

Ngoài cảm giác phong cách mà làm cho rất nhiều lập trình viên dày dạn nghĩ "Huh, có ai đó đột nhiên bắt đầu viết Pascal?", Không có sự khác biệt chức năng.

Mục đích của các tên thay thế này là cho phép những người sống ở Thụy Điển hoặc Đức sử dụng biến thể Local chuẩn ASCII, trong đó |ö.

Kể từ khi giới thiệu Unicode và ASCII mở rộng, nhu cầu này đã biến mất khá nhiều, vì các bộ ký tự được quốc hữu hóa không phải "ăn cắp" các ký tự thường được sử dụng để tạo ra các ký tự "đặc biệt" của quốc gia.

+0

Trở lại trường đại học, tôi thấy một anh chàng có một thư viện macro làm cho mã C++ trông gần giống hệt như pascal. Bao gồm 'bắt đầu' và' kết thúc'. – Sulthan

+1

Tôi không hiểu đoạn thứ hai của bạn - với kiến ​​thức của tôi 'ö' không tồn tại trong bảng ASCII danish và chắc chắn không phải trên bàn phím Đan Mạch. Trên bàn phím Đan Mạch, ký tự ống '|' nằm ở hàng đầu tiên bên trái của '← Backspace' và trên' Å' trong khi trên một bàn phím của Mỹ là - như bạn đã biết - nằm bên dưới '← Backspace'. – Muleskinner

+0

ASCII là ASCII và không có biến thể nào. Có thể bạn có nghĩa là codepages, nhưng những người khác nhau chỉ trong khu vực ngoài ASCII, tức là các giá trị ký tự từ 128 đến 255. Các ký tự '|' và '&' nằm trong ASCII và do đó trong bất kỳ mã nào. Điều khác biệt ở các quốc gia khác là bố trí bàn phím và khi những ký tự đặc biệt này khó truy cập, 'hoặc',' và' v.v. đến. –

2

đã chỉnh sửa Bạn có thể quá tải operator or.

Chúng giống nhau.

Xem Operators in C and C++.

Nếu bạn quá tải operator or cho một loại, bạn không thể quá tải operator|| cho cùng loại với trình biên dịch sẽ coi chúng là cùng chức năng.

lỗi này xuất phát từ đoạn mã sau:

> 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 

On 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

Trong khi bạn không thể quá tải 'hoặc' có nghĩa là một điều khác với' || 'bạn có thể quá tải '||' và sử dụng 'hoặc' sẽ sử dụng quá. – PlasmaHH

+0

Bạn có thể quá tải nó, nhưng sau đó nó được đặt tên là 'toán tử hoặc'. – MSalters

1

Theo ISO14882: 2011 (e) 2,6-2 (Bảng 2) or là một dấu hiệu thay thế cho || và như vậy có cùng nghĩa chính xác:

Trong tất cả các khía cạnh của ngôn ngữ ge, mỗi mã thông báo thay thế cũng hoạt động tương tự như mã thông báo chính của mã bưu chính, ngoại trừ chính tả của nó.

Trình biên dịch thường thực hiện chúng dưới dạng #define or || hoặc tương đương nội bộ.

Tương tự cho and, bitor, xor, compl, bitand, and_eq, or_eq, xor_eq, notnot_eq.

1

Như đã nói trong các câu trả lời khác, cả hai có nghĩa là giống nhau và do đó có thể trao đổi. Nhưng có một sự khác biệt lớn: MSVC, C++ Builder và có thể các trình biên dịch khác cũng không hỗ trợ or mà không bao gồm một tiêu đề đặc biệt. Điều đó làm cho việc sử dụng or trở ngại về tính di động.

Các vấn đề liên quan