Saya mencoba untuk memahami jenis ekspresi C ++ dan semakin banyak saya membaca, semakin bingung saya, karena saya menemukan konsep C ++ sangat sulit untuk dicerna dan oleh karena itu lebih suka sumber daya lain tetapi mereka saling bertentangan atau tidak memperhitungkan bahwa kata-kata dan definisi antara versi C ++ sangat berubah.
Berikut ini saya merujuk ke draft berikut:
- C ++ 11 [ n3690 ] (konsep terakhir)
- C ++ 17 [ n4659 ] (draft terakhir)
- C ++ 20 [ n4835 ] (konsep saat ini)
C++11
3.10 Nilai dan nilai... Prvalue ("pure" rvalue) adalah rvalue yang bukan xvalue. [Contoh: Hasil memanggil fungsi yang tipe kembaliannya bukan referensi adalah nilai awal. Nilai literal seperti 12, 7.3e5, atau true juga merupakan nilai awal. - contoh akhir]
C++17
3.10 Nilai dan nilai... Nilai awal adalah ekspresi yang evaluasinya menginisialisasi objek atau bit-field, atau menghitung nilai operan operator, sebagaimana ditentukan oleh konteks di mana ia muncul.
C++20
7.2.1 Kategori nilai *... Nilai awal adalah ekspresi yang evaluasinya menginisialisasi objek atau bit-field, atau menghitung nilai operan operator, seperti yang ditentukan oleh konteks di mana ia muncul, atau ekspresi yang memiliki tipe cv void.
Saya akan memahami perubahan kata-kata, dan beberapa penyesuaian dilakukan, tetapi bagi saya seluruh definisi berubah. Adakah yang bisa membantu saya untuk memahami hal ini? Misalnya, mengapa kalimat dihapus bahwa nilai awal adalah nilai yang bukan nilai tambah? Atau mengapa contoh yang bermanfaat dihapus?