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

Bagaimanakah Saya Boleh Memulakan Ahli Constexpr Statik dengan Fungsi Statik dalam C?

Linda Hamilton
Linda Hamiltonasal
2024-12-07 21:42:14305semak imbas

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

Memulakan Konstexpr Ahli Statik Menggunakan Fungsi Statik

Masalah:

Anda ingin menentukan ahli constexpr dengan fungsi statik, memulakannya dengan nilai yang dikira pada masa penyusunan. Walau bagaimanapun, anda menghadapi ralat penyusunan semasa cuba berbuat demikian dalam GCC.

Percubaan Awal:

Percubaan pertama anda meletakkan ahli dan fungsi constexpr statik dalam definisi kelas, mencetuskan menyusun ralat dalam versi lama GCC. Percubaan kedua anda mengalihkan elemen ini ke luar isi kelas, tetapi sekali lagi, anda menghadapi isu dalam versi kemudian.

Penjelasan:

Piawaian C menentukan keperluan khusus untuk statik constexpr ahli data. Ahli ini mesti dimulakan menggunakan pendakap-atau-sama-pemula, di mana setiap tugasan adalah ungkapan tetap. Dalam "percubaan kedua" anda, anda tidak mematuhi format ini.

Penyelesaian:

Malangnya, memulakan ahli data statik constexpr menggunakan fungsi statik bukan pada masa ini mungkin mengikut Piawaian C. Ini kerana pembolehubah constexpr mesti tersedia sebagai pemalar masa kompilasi dari dalam badan fungsi ahli. Walau bagaimanapun, fungsi statik tidak ditentukan sehingga kelas selesai, menjadikannya mustahil untuk ungkapan menjadi ungkapan tetap.

Isu Diperhatikan dalam GCC:

Percubaan pertama anda sepatutnya sah tetapi mungkin telah menemui pepijat dalam versi GCC yang lebih awal. Jika anda mempunyai akses kepada versi GCC yang lebih terbaharu, anda patut mencuba kod awal sekali lagi.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memulakan Ahli Constexpr Statik dengan Fungsi Statik 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