Vì vậy, đây là nhiều hơn một câu hỏi lý thuyết. C ++ và các ngôn ngữ (in) trực tiếp dựa trên nó (Java, C #, PHP) có các toán tử phím tắt để gán kết quả của hầu hết các toán tử nhị phân cho toán hạng đầu tiên, chẳng hạn như
a += 3;   // for a = a + 3
a *= 3;   // for a = a * 3;
a <<= 3;  // for a = a << 3;
nhưng khi tôi muốn chuyển đổi một biểu thức boolean, tôi luôn thấy mình viết một cái gì đó như
a = !a;
Điều này gây khó chịu khi amột biểu hiện dài như thế nào.
this.dataSource.trackedObject.currentValue.booleanFlag =
    !this.dataSource.trackedObject.currentValue.booleanFlag;
(vâng, Luật của Demeter, tôi biết).
Vì vậy, tôi đã tự hỏi, có ngôn ngữ nào với toán tử chuyển đổi boolean unary sẽ cho phép tôi viết tắt a = !amà không lặp lại biểu thức cho a, ví dụ
!=a;  
// or
a!!;
Giả sử rằng ngôn ngữ của chúng ta có loại boolean thích hợp (như booltrong C ++) và đó alà loại đó (vì vậy không có kiểu C int a = TRUE).
Nếu bạn có thể tìm thấy một nguồn tài liệu, tôi cũng muốn tìm hiểu xem, ví dụ như các nhà thiết kế C ++ đã xem xét việc thêm một toán tử như thế khi booltrở thành một loại tích hợp và nếu vậy, tại sao họ lại quyết định chống lại nó.
(Lưu ý: Tôi biết rằng một số người có quan điểm rằng việc chuyển nhượng không nên sử dụng 
 =và điều đó ++và +=không phải là các nhà khai thác hữu ích nhưng lỗi trong thiết kế; chúng ta hãy chỉ giả sử tôi đang hạnh phúc với họ và tập trung vào lý do tại sao họ sẽ không mở rộng đến bools).
this.dataSource.trackedObject.currentValue.booleanFlag ^= 1;
                *= -1, mặc dù vậy, vì một số lý do tôi thấy trực quan hơn ^= true.
                
void Flip(bool& Flag) { Flag=!Flag; }Việc rút ngắn biểu thức dài của bạn.