7.3.8 Toán tử logic

Toán tử ! && ||
Có thể được thực hiện như là một hàm toàn cục không ?
Có thể được thực hiện như là một hàm thành việc của lớp không ?
Kiểu dữ liệu trả về boolean

Lưu ý: các toán tử nhị phân mặc định (không nạp chồng) sử dụng một thuật toán đánh giá ngắn mạch, điều này có nghĩa là chúng cố gắng bỏ qua việc đánh giá đối số bên phải nếu đối số bên trái đã đủ để xác định kết quả cuối cùng. Khi đối số bên trái của || là đúng, toàn bộ biểu thức cũng đúng, bất kể giá trị đối bên phải là như nào. Và khi đối số bên trái của && là sai, toàn bộ biểu thức cũng là sai, bất kể giá trị đối số bên phải là bao nhiêu. Điều này không quan trọng lắm nếu đối số là các biến hoặc các quan hệ đơn giản, nhưng nó sẽ là vấn đề khi chúng là lời gọi hàm.

Giả sử rằng chúng ta có hai hàm f1 () và f2 (), cả hai đều trả về bool. Trong biểu thức sau:

f1 () && f2 ()

việc hàm f2 () có được gọi hay không thì phụ thuộc vào kết quả của f1 ().

Vì toán tử nạp chồng sẽ không thể tạo ra sự phân biệt như vậy nên cả hai hàm trên sẽ cùng được gọi khi được sử dụng cùng nhau trong một biểu thức.

Ví dụ →

Ví dụ này định nghĩa toán tử ‘&&’ để kiểm tra điều kiện được xác định bằng miệng, như sau:

“Các vectơ bên trái và bên phải có ít nhất một phần tử khác không.”

Toán tử ‘!’ thì trả về một giá trị phản ánh điều kiện:

“Tất cả các phần tử của vectơ đều khác không.”

Chương trình sẽ in ra hai dòng sau:

true

true