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
Lepaskan: 2024-11-30 07:02:17
asal
1044 orang telah melayarinya

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));
};
Salin selepas log masuk

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));
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan