Apa perbedaan antara constexprdan const? Kapan saya bisa menggunakan salah satunya saja? Kapan saya bisa menggunakan keduanya dan bagaimana saya
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.
Apa perbedaan antara constexprdan const? Kapan saya bisa menggunakan salah satunya saja? Kapan saya bisa menggunakan keduanya dan bagaimana saya
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...
Jika saya memiliki variabel di dalam suatu fungsi (katakanlah, array besar), apakah masuk akal untuk menyatakan keduanya staticdan constexpr? constexprmenjamin bahwa array dibuat pada waktu kompilasi, jadi apakah statictidak akan berguna? void f() { static constexpr int x [] = { // a few...
Saya ingin memiliki static const chararray di kelas saya. GCC mengeluh dan mengatakan kepada saya bahwa saya harus menggunakan constexpr, meskipun sekarang memberitahu saya itu referensi yang tidak ditentukan. Jika saya membuat array menjadi non-anggota maka kompilasi. Apa yang sedang terjadi? //...
Menggunakan C ++ 11, Ubuntu 14.04, GCC toolchain default . Kode ini gagal: constexpr std::string constString = "constString"; error: tipe 'const string {alias const std :: basic_string}' dari variabel constexpr 'constString' tidak literal ... karena ... 'std :: basic_string' memiliki...
Pertimbangkan fungsi sebaris berikut: // 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])); } dan versi yang setara dengan...
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...
Saya mencoba menghitung panjang string literal pada waktu kompilasi. Untuk melakukannya, saya menggunakan kode berikut: #include <cstdio> int constexpr length(const char* str) { return *str ? 1 + length(str + 1) : 0; } int main() { printf("%d %d", length("abcd"),
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;
Saya memiliki fungsi yang mengambil multidimensi std::vectordan membutuhkan kedalaman (atau jumlah dimensi) untuk dilewatkan sebagai parameter templat. Alih-alih hardcoding nilai ini saya ingin menulis constexprfungsi yang akan mengambil std::vectordan mengembalikan kedalaman sebagai unsigned...
TL; DR Sebelum Anda mencoba membaca seluruh posting ini, ketahuilah bahwa: solusi untuk masalah yang disajikan telah ditemukan sendiri , tetapi saya masih ingin tahu apakah analisisnya benar; Saya telah mengemas solusi ke dalam fameta::counterkelas yang memecahkan beberapa kebiasaan yang...
Tim kami bekerja dengan basis kode C ++ 10+ tahun dan baru-baru ini beralih ke kompiler C ++ 17. Jadi kami mencari cara untuk memodernisasi kode kami. Dalam ceramah konferensi di YouTube saya mendengar saran, untuk menggantikan const char*string global constexpr string_view. Karena kita punya...
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...
Saya bermain-main dengan c ++ 20 consteval di GCC 10 dan menulis kode ini #include <optional> #include <tuple> #include <iostream> template <std::size_t N, typename Predicate, typename Tuple> consteval std::optional<std::size_t> find_if_impl(Predicate&&...
Apakah ini C ++ yang valid? int main() { constexpr auto sz = __func__ - __func__; return sz; } GCC dan MSVC berpikir tidak apa-apa, Clang berpikir itu tidak: Compiler Explorer . Semua kompiler setuju bahwa ini OK: Kompiler Explorer . int main() { constexpr auto p = __func__; constexpr...
Di C ++ 20, std::swapmenjadi constexprfungsi. Saya tahu bahwa perpustakaan standar benar-benar tertinggal di belakang bahasa dalam menandai hal-hal constexpr, tetapi pada 2017, <algorithm>cukup banyak constexpr seperti banyak hal lainnya. Namun - std::swaptidak. Samar-samar saya ingat ada...
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 () {...
Apakah kode berikut ini sah? template <int N> class foo { public: constexpr foo() { for (int i = 0; i < N; ++i) { v_[i] = i; } } private: int v_[N]; }; constexpr foo<5> bar; Dentang menerimanya, tetapi GCC dan MSVC menolaknya. Kesalahan GCC adalah: main.cpp:15:18: error:...
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...