Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Memulakan Ahli Statik Constexpr Dengan betul Menggunakan Fungsi Statik Constexpr dalam C?
Senario yang anda bentangkan melibatkan memulakan ahli statik constexpr dalam kelas menggunakan fungsi constexpr. Malangnya, percubaan untuk mencapai ini dengan pendekatan khusus telah menghadapi cabaran dalam versi gcc yang berbeza. Dalam artikel ini, kami membedah percubaan ini, meneroka sebab asas ralat dan menyediakan penyelesaian atau penjelasan yang mungkin.
Percubaan awal anda melibatkan pengisytiharan kedua-dua fungsi constexpr foo dan bar ahli statik constexpr dalam badan kelas, tetapi ini membawa kepada ralat penyusunan. Ia menunjukkan bahawa panggilan fungsi tidak boleh wujud dalam ungkapan malar dan ahli kelas statik tidak boleh mempunyai pemula yang tidak tetap.
Percubaan kedua mengalihkan pengisytiharan ke luar badan kelas , tetapi ini masih mengakibatkan ralat. Terutamanya, mesej ralat menyebut bahawa bar ahli data statik mesti mempunyai pemula dan pengisytiharannya sebagai constexpr bercanggah dengan pengisytiharan sebelumnya di luar kelas.
Bahagian C Standard 9.4 .2 menyatakan bahawa ahli data statik jenis literal boleh mempunyai penentu constexpr dalam pengisytiharan mereka. Walau bagaimanapun, pemula mereka mestilah pemula pendakap atau-sama-sama dan sebarang ungkapan tugasan di dalamnya mestilah ungkapan tetap.
Dalam kedua-dua percubaan anda, pengisytiharan bar tidak mempunyai pendakap-atau-sama -pemula. Oleh itu, kedua-duanya tidak memenuhi keperluan yang ditetapkan oleh Piawaian.
Keadaan ini, walau bagaimanapun, mempunyai had semula jadi yang dikenakan oleh Piawaian. Ia tidak membenarkan memulakan ahli data constexpr statik dalam konteks di mana kelas itu lengkap. Oleh itu, menggunakan peraturan pendakap-atau-sama-pemula hanya terpakai kepada ahli data bukan statik.
Oleh itu, permulaan ahli data constexpr statik menggunakan fungsi constexpr yang bergantung pada penyiapan kelas menjadi mustahil . Sekatan ini mungkin disebabkan oleh keperluan bahawa pembolehubah constexpr mesti tersedia sebagai ungkapan pemalar masa kompilasi dalam konteks fungsi ahli. Oleh itu, pemula pembolehubah mesti ditakrifkan sepenuhnya sebelum badan fungsi, tetapi pemula ahli data statik membawa kepada pemanggilan fungsi yang tidak ditentukan dalam konteks ini, melanggar keperluan ungkapan malar.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memulakan Ahli Statik Constexpr Dengan betul Menggunakan Fungsi Statik Constexpr dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!