«constexpr» etiketlenmiş sorular

constexpr, derleyiciye bir işlevin veya değişkenin değerinin bilindiğini veya derleme zamanında hesaplanabileceğini bildiren, C ++ 11'de tanıtılan bir değiştiricidir. Bu nedenle başka türlü olamayacağı yerlerde sabit olarak kullanılabilir.


14
C ++ 11'de constexpr özelliğini ne zaman kullanmalısınız?
Bana öyle geliyor ki, "her zaman 5 döndüren bir işleve" sahip olmak, "bir işlevi çağırmak" anlamını bozmaktadır. Bu yeteneğin bir nedeni veya ihtiyacı olmalı ya da C ++ 11'de olmayacaktır. Neden orada? // preprocessor. #define MEANING_OF_LIFE 42 // constants: const int MeaningOfLife = 42; // constexpr-function: constexpr int MeaningOfLife () …
337 c++  c++11  constexpr 



6
Statik constexpr char [] için tanımlanmamış referans
static const charSınıfımda bir dizi olmasını istiyorum. GCC şikayet etti ve bana kullanmam gerektiğini söyledi constexpr, ancak şimdi bana tanımsız bir referans olduğunu söylüyor. Ben dizi üyesi olmayan yaparsanız derler. Ne oluyor? // .hpp struct foo { void bar(); static constexpr char baz[] = "quz"; }; // .cpp void foo::bar() …

4
Bir constexpr içinde std :: string kullanmak mümkün mü?
C ++ 11, Ubuntu 14.04, GCC varsayılan araç zinciri kullanılarak . Bu kod başarısız: constexpr std::string constString = "constString"; hata: 'constString' constexpr değişkeninin 'const dizesi {aka const std :: basic_string}' harfi değişmez ... çünkü ... 'std :: basic_string' önemsiz olmayan bir yıkıcıya sahip Kullanmak mümkün mü std::stringbir de constexpr? (görünüşe …

2
Constexpr satır içi anlamına mı geliyor?
Aşağıdaki satır içi işlevi düşünün: // Inline specifier version #include<iostream> #include<cstdlib> inline int f(const int x); inline int f(const int x) { return 2*x; } int main(int argc, char* argv[]) { return f(std::atoi(argv[1])); } ve constexpr eşdeğer sürümü: // Constexpr specifier version #include<iostream> #include<cstdlib> constexpr int f(const int x); constexpr …

2
C ++ 'da "bir işlevi zehirlemek" ne anlama gelir?
Scott Schurr'ın CppCon'daki "Tanıtıcı constexpr" konuşmasının en sonunda , "Bir işlevi zehirlemenin bir yolu var mı?" Diye soruyor. Daha sonra bunun (standart olmayan bir şekilde de olsa) şu şekilde yapılabileceğini açıklar: throwBir constexprişlevi bir işleve koymak Çözülmemiş ilan etmek extern const char* Çözülmemiş başvurulması externhalindethrow Burada derinliğimden biraz uzak olduğumu …
96 c++  constexpr 

6
Derleme zamanında bir C dizesinin hesaplama uzunluğu. Bu gerçekten bir konstexpr mi?
Derleme zamanında bir dizgenin uzunluğunu hesaplamaya çalışıyorum. Bunu yapmak için aşağıdaki kodu kullanıyorum: #include <cstdio> int constexpr length(const char* str) { return *str ? 1 + length(str + 1) : 0; } int main() { printf("%d %d", length("abcd"), length("abcdefgh")); } Her şey beklendiği gibi çalışır, program 4 ve 8'i yazdırır. …

3
Constexpr ve makrolar
Makroları nerede kullanmayı tercih etmeliyim ve nerede constexpr'i tercih etmeliyim ? Temelde aynı değiller mi? #define MAX_HEIGHT 720 vs constexpr unsigned int max_height = 720;
92 c++  c++11  macros  constexpr 

3
Derleme zamanında çok boyutlu bir std :: vektörünün derinliğini nasıl alabilirim?
Çok boyutlu alır std::vectorve bir şablon parametresi olarak geçirilmesi için derinlik (veya boyut sayısı) gerektiren bir işlevi var . Bu değeri kodlamak yerine derinliği bir değer olarak constexpralıp std::vectordöndürecek bir fonksiyon yazmak istiyorum unsigned integer. Örneğin: std::vector<std::vector<std::vector<int>>> v = { { { 0, 1}, { 2, 3 } }, { …

1
C ++ derleme zaman sayaçları, yeniden ziyaret edildi
TL; DR Bu yazının tamamını okumaya çalışmadan önce şunu bilin: sunulan konuya bir çözüm buldum , ancak yine de analizin doğru olup olmadığını bilmek için sabırsızlanıyorum; Çözümü fameta::counterkalan birkaç tuhaflığı çözen bir sınıfa paketledim . Sen edebilirsiniz github bulmak ; En görebilirsiniz Godbolt çalışma . Her şey nasıl başladı Filip …

1
Global const char [] yerine constexpr string_view değiştiren var mı?
Ekibimiz 10+ yaş C ++ kod tabanı ile çalışıyor ve yakın zamanda C ++ 17 derleyicisine geçti. Bu yüzden kodumuzu modernize etmenin yollarını arıyoruz. YouTube'daki bir konferans görüşmesinde, const char*küresel dizeleri değiştirmek için öneriyi duydum constexpr string_view. Kodumuzda çok sayıda const char*küresel dize sabitine sahip olduğumuzdan, bilmemiz gereken herhangi bir …

1
std :: çift <otomatik, otomatik> dönüş türü
Ben oynamalar autoiçinde std::pair. Aşağıdaki kodda, fonksiyonun bir template parametresine bağlı olan bir tür fdöndürmesi beklenir std::pair. Çalışan bir örnek: ÖRNEK 1 template &lt;unsigned S&gt; auto f() { if constexpr (S == 1) return std::pair{1, 2}; // pair of ints else if constexpr (S == 2) return std::pair{1.0, 2.0}; // …

2
Neden std :: swap, C ++ 20'den önce constexpr olarak işaretlenmiyor?
C ++ 20'de std::swapbir constexprişlev haline gelir . Standart kütüphanenin constexpr, şeyleri işaretlemede dilin gerçekten gerisinde olduğunu biliyorum , ancak 2017 &lt;algorithm&gt;yılına kadar, bir sürü başka şey gibi oldukça karmaşıktı. Henüz - std::swapdeğildi. Bu işaretlemeyi engelleyen garip bir dil kusuru olduğunu belirsiz bir şekilde hatırlıyorum, ancak detayları unutuyorum. Birisi bunu …

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.