Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Memulakan Ahli Statik Constexpr Dengan betul Menggunakan Fungsi Statik Constexpr dalam C?

Bagaimanakah Saya Boleh Memulakan Ahli Statik Constexpr Dengan betul Menggunakan Fungsi Statik Constexpr dalam C?

Linda Hamilton
Linda Hamiltonasal
2024-12-02 13:35:12833semak imbas

How Can I Correctly Initialize a Constexpr Static Member Using a Constexpr Static Function in C  ?

constexpr Memulakan Ahli Statik Menggunakan Fungsi Statik: Satu Panduan

Pengenalan

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 Pertama dan Ralatnya

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 dan Ralatnya

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.

Menganalisis Standard

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.

Keterbatasan dan Penyelesaian

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!

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