นี่คือปริศนาหนึ่ง โปรแกรมด้านล่างจะให้ผลลัพธ์อะไร และทำไม?
ตัวอย่าง
#include <iostream>
using namespace std;
int main() {
int x = 0xab;
~x;
cout << hex << x;
}
ผลลัพธ์จะเป็นอะไร? ~x ทำการคอมพลีเมนต์ แต่จะแสดงผลในรูป hex หรือไม่?
ผลลัพธ์
ab
ไม่มีการเปลี่ยนแปลงเลย แต่ทำไม? เพราะ ~x แปลง x เป็นคอมพลีเมนต์ แต่ค่านั้นไม่ได้ถูก assign ให้ตัวแปรใดๆ นิพจน์นี้เป็น R-value expression จนกว่าจะมี L-value มารับค่า มันจะไม่ถูกเก็บ ถ้าเราเขียนเป็น L-value จะได้ดังนี้
ตัวอย่างที่แก้ไข
#include <iostream>
using namespace std;
int main() {
int x = 0xab;
x = ~x;
cout << hex << x;
}
ผลลัพธ์
ffffff54