Mengapa constexpr harus statis?

Nov 16 2020

Setelah membaca ini dan ini saya masih merasa bingung dengan ungkapan seperti ini:

static constexpr int = 0;

AFAIK, dalam C ++:

  • static memastikan alamat memori seumur hidup di sepanjang eksekusi dan inisialisasi yang aman dengan thread bersamaan
  • constexpr memastikan evaluasi kompilasi waktu sebagai nilai r, yang berarti tidak memiliki alamat memori

Mereka tampak kontradiktif bagi saya. staticmemastikan variabel akan memiliki alamat memori yang lama sementara constexprmemastikan asumsi yang berlawanan. Anehnya, pembahasan di tautan pertama menyebutkan ini:

constexpr int x = 3;
const int* p = &x;

Bagaimana kita bisa mendapatkan alamat memori xjika itu adalah nilai r?

Adakah yang bisa menjelaskannya? Terima kasih sebelumnya

Jawaban

1 MSalters Nov 16 2020 at 17:10

staticmemiliki sejumlah arti. Di kelas (per komentar Anda), itu berarti bahwa anggota tersebut terkait dengan kelas, dan bukan contoh spesifik (objek) dari kelas itu.

Untuk a constexpr, itu sangat masuk akal. Itu biasanya diinisialisasi oleh nilai yang dikenal oleh kompilator, dan bukan dari argumen ctor.