Rumah >pembangunan bahagian belakang >C++ >Adakah C Initialization Memerlukan Penukaran Lvalue-to-Rvalue?

Adakah C Initialization Memerlukan Penukaran Lvalue-to-Rvalue?

Susan Sarandon
Susan Sarandonasal
2024-12-15 12:33:08813semak imbas

Does C   Initialization Require Lvalue-to-Rvalue Conversion?

Adakah Permulaan Memerlukan Penukaran Lnilai-ke-Nilai?

Piawaian C 11 masih tidak jelas sama ada permulaan memerlukan penukaran lnilai-ke-r . Walau bagaimanapun, bukti menunjukkan bahawa nilai-nilai dijangkakan sebagai operan dalam pengendali terbina dalam, melainkan dinyatakan sebaliknya. Pendekatan ini telah diperluaskan kepada konteks pemula.

Konjektur: Prvalues ​​Dijangka untuk Nilai

Spesifikasi yang diandaikan ialah prvalues ​​dijangka di mana sahaja nilai diperlukan, termasuk semasa permulaan. Ini menunjukkan bahawa penukaran lnilai kepada nilai diperlukan apabila memulakan objek.

Akibat Konjektur

Jika permulaan menjangkakan nilai, perkara berikut berlaku:

  • int x = x; mengalami penukaran nilai-ke-rnilai, membawa kepada gelagat tidak ditentukan kerana x tidak dimulakan.
  • Kecelaruan untuk kod seperti int y = 0; int x = y;, dengan y ialah nilai l.
  • Tingkah laku tidak konsisten, mis. z = y adalah tingkah laku yang tidak ditentukan tetapi z = x tidak begitu, dengan mengandaikan x == y.

Bukti Lanjut

Bukti tambahan yang menyokong sangkaan ini termasuk:

  • Perenggan 8.5/16 Piawaian membayangkan keperluan untuk "penukaran standard" tetapi tidak menyebut penukaran kategori.
  • Perenggan 4.1 menyebut gelagat yang tidak ditentukan apabila menggunakan penukaran nilai-ke-rnilai pada objek yang tidak dimulakan.
  • Laporan kecacatan mencadangkan kata semula Perenggan 4.1 untuk disertakan objek dengan nilai tidak tentu, termasuk tidak dimulakan objek.

Kesimpulan

Berdasarkan bukti yang diberikan, tafsiran yang paling mungkin ialah pemulaan menjangkakan nilai, mengakibatkan tingkah laku yang tidak ditentukan apabila menggunakan nilai yang tidak dimulakan sebagai pemula . Tafsiran ini sejajar dengan pendekatan yang lebih luas untuk menjangkakan nilai dalam pengendali terbina dalam melainkan dinyatakan sebaliknya.

Atas ialah kandungan terperinci Adakah C Initialization Memerlukan Penukaran Lvalue-to-Rvalue?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn