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

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

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-30 07:02:17978semak imbas

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

constexpr Memulakan Ahli Statik Menggunakan Fungsi Statik

Isu

Matlamatnya adalah untuk mendapatkan pemalar masa kompilasi (nilai constexpr) yang dikira daripada constexpr fungsi, kedua-duanya dalam ruang nama kelas yang sama.

Pertama Percubaan

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.

Percubaan Kedua

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.

Penjelasan

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.

Kesimpulan

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!

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