Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Memulakan Ahli Constexpr Statik Menggunakan Fungsi Constexpr Statik dalam C?
Matlamatnya adalah untuk mendapatkan pemalar masa kompilasi (nilai constexpr) yang dikira daripada constexpr fungsi, kedua-duanya dalam ruang nama kelas yang sama.
class C1 { constexpr static int foo(int x) { return x + 1; } constexpr static int bar = foo(sizeof(int)); };
Walau bagaimanapun, ini gagal pada kedua-dua g -4.5.3 dan g -4.6.3, memetik penggunaan ungkapan bukan pemalar dalam pemula.
class C2 { constexpr static int foo(int x) { return x + 1; } constexpr static int bar; }; constexpr int C2::bar = C2::foo(sizeof(int));
Semasa ini disusun pada g -4.5.3, g -4.6.3 menunjukkan ketidakkonsistenan dan ralat pengisytiharan semula.
Menurut Piawaian C (bahagian 9.4.2), ahli data statik constexpr hanya boleh diisytiharkan dengan pendakap-atau-pemula-sama dalam takrifan kelas, di mana setiap klausa pemula mestilah ungkapan tetap.
Dalam "percubaan kedua," pengisytiharan tidak mempunyai pendakap-atau-pemula-sama-sama yang diperlukan.
Bertentangan dengan andaian awal, kedua-dua percubaan terbukti tidak berjaya. Standard melarang memulakan ahli data constexpr statik dalam konteks di mana kelas itu lengkap.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memulakan Ahli Constexpr Statik Menggunakan Fungsi Constexpr Statik dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!