Constexpr neden statik olmalıdır?

Nov 16 2020

Okuduktan sonra bu ve bu hala ifadelerin bu tür hakkında karıştı hissediyorum:

static constexpr int = 0;

AFAIK, C ++ ile:

  • static tüm yürütme boyunca yaşam boyu bellek adresi ve eşzamanlı iş parçacıklarıyla güvenli başlatma sağlar
  • constexpr r değeri olarak zaman-derleme değerlendirmesini sağlar, yani bellek adresi olmayacaktır

Bana çelişkili görünüyorlar. staticdeğişkenin uzun süreli bir hafıza adresine sahip constexprolmasını sağlarken , tersi varsayımı sağlar. Şaşırtıcı bir şekilde, ilk bağlantıdaki tartışma bundan bahsediyor:

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

Bir r değeri olup xolmadığının bellek adresini nasıl elde edebiliriz ?

Bunu kimse açıklayabilir mi? Şimdiden teşekkürler

Yanıtlar

1 MSalters Nov 16 2020 at 17:10

staticbir dizi anlamı vardır. Sınıflarda (yorumunuza göre), üyenin sınıfla ilişkili olduğu ve o sınıfın belirli bir örneği (nesnesi) olmadığı anlamına gelir.

A için constexprbu çok mantıklı. Bu genellikle derleyici tarafından bilinen bir değerle başlatılır ve ctor argümanlarından değil.