Pertanyaan yang diberi tag constexpr

constexpr adalah pengubah yang diperkenalkan di C ++ 11, yang menginformasikan compiler bahwa nilai dari suatu fungsi atau variabel diketahui atau dapat dihitung pada waktu kompilasi. Dengan demikian, ini dapat digunakan sebagai konstanta di tempat-tempat yang sebaliknya tidak mungkin terjadi.

337
Kapan Anda harus menggunakan kemampuan constexpr di C ++ 11?

Tampak bagi saya bahwa memiliki "fungsi yang selalu mengembalikan 5" adalah memecah atau melemahkan arti "memanggil fungsi". Pasti ada alasan, atau kebutuhan untuk kemampuan ini atau itu tidak akan ada di C ++ 11. Kenapa disana? // preprocessor. #define MEANING_OF_LIFE 42 // constants: const int...

96
Apa yang dimaksud dengan "meracuni suatu fungsi" di C ++?

Di akhir ceramah Scott Schurr "Memperkenalkanconstexpr " di CppCon , dia bertanya "Apakah ada cara untuk meracuni suatu fungsi"? Dia kemudian menjelaskan bahwa ini dapat dilakukan (meskipun dengan cara yang tidak standar) dengan: Menempatkan a throw dalam suatu constexprfungsi Menyatakan belum...

92
Constexpr vs makro

Di mana saya harus memilih menggunakan makro dan di mana saya harus memilih constexpr ? Bukankah pada dasarnya mereka sama? #define MAX_HEIGHT 720 vs. constexpr unsigned int max_height = 720;

16
std :: pair <auto, auto> ketik kembali

Aku sedang bermain-main dengan autodi std::pair. Dalam kode di bawah ini, fungsi fseharusnya mengembalikan std::pairtipe yang bergantung pada parameter templat. Contoh kerja: CONTOH 1 template <unsigned S> auto f() { if constexpr (S == 1) return std::pair{1, 2}; // pair of ints else if...

13
Bagaimana expr dievaluasi begitu cepat

Saya telah mencoba ekspresi const yang dievaluasi pada waktu kompilasi. Tapi saya bermain dengan contoh yang tampak sangat cepat ketika dieksekusi pada waktu kompilasi. #include<iostream> constexpr long int fib(int n) { return (n <= 1)? n : fib(n-1) + fib(n-2); } int main () {...

11
Bisakah span menjadi constexpr?

Semua konstruktor std :: span dideklarasikan dengan constexpr, namun sepertinya saya tidak bisa membuat mereka bekerja dalam konteks constexpr. Membatalkan komentar salah satu dari constexpr di bawah ini akan menghasilkan kesalahan kompilasi. #include <array> #include <span> int...