constexpr i czas kompilacji
Obliczaj wartości w czasie kompilacji
constexpr i czas kompilacji to bezpłatna lekcja C++ Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C++ Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C++ Academy zawiera 4 lekcji w sumie.
Znaczenie constexpr
constexpr informuje kompilator, że wartość lub funkcja może zostać obliczona w czasie kompilacji, tworząc rzeczywistą stałą znaną na etapie kompilacji.
#include <iostream>
int main() {
constexpr int size = 4 * 4; // computed at compile time
int arr[size];
std::cout << sizeof(arr) / sizeof(int) << "\n";
}Funkcje constexpr
Funkcja constexpr może zostać wykonana w czasie kompilacji, gdy otrzyma stałe argumenty, a w przeciwnym razie — w czasie działania programu.
#include <iostream>
constexpr int square(int x) { return x * x; }
int main() {
constexpr int s = square(5); // compile time
int n = 6;
std::cout << s << " " << square(n) << "\n"; // second at runtime
}Stałe czasu kompilacji w tablicach
Ponieważ wartości constexpr są znane w czasie kompilacji, można ich używać do określania rozmiaru tablic i jako argumentów szablonów.
constexpr a const
const oznacza „nie można zmienić”, a constexpr — „znane w czasie kompilacji”. Każda wartość constexpr jest niejawnie const, ale nie każda wartość const jest constexpr.
#include <iostream>
int main() {
int x;
std::cin >> x;
const int a = x; // const but runtime value
constexpr int b = 10; // compile-time constant
std::cout << b << "\n";
}Rekurencyjne constexpr
Funkcje constexpr mogą być rekurencyjne, dzięki czemu kompilator może obliczać na przykład silnie, zanim program zostanie uruchomiony.
#include <iostream>
constexpr long factorial(int n) {
return n <= 1 ? 1 : n * factorial(n - 1);
}
int main() {
constexpr long f = factorial(5); // 120 at compile time
std::cout << f << "\n";
}Bardziej rozbudowane constexpr we współczesnym C++
Od C++14 funkcje constexpr mogą zawierać pętle, zmienne lokalne i rozgałęzienia, co pozwala obliczać złożone stałe w czasie kompilacji.
#include <iostream>
constexpr int sumTo(int n) {
int total = 0;
for (int i = 1; i <= n; ++i) total += i;
return total;
}
int main() {
constexpr int s = sumTo(100);
std::cout << s << "\n";
}Zmienne constexpr muszą być inicjalizowane w czasie kompilacji
Zmienna zadeklarowana jako constexpr musi mieć inicjalizator, który można obliczyć w czasie kompilacji, w przeciwnym razie program się nie skompiluje.
Korzyści z obliczeń w czasie kompilacji
Obliczenia wykonywane w czasie kompilacji oznaczają zerowy koszt w czasie działania, możliwość używania wartości w kontekstach stałych oraz wcześniejsze wykrywanie błędów.
constexpr i szablony
Wartości constexpr naturalnie współpracują z szablonami i elementem std::array, w przypadku których rozmiary i parametry muszą być stałymi znanymi w czasie kompilacji.
Kiedy obliczenia przechodzą do czasu działania
Jeśli funkcja constexpr otrzyma argumenty, które nie są stałymi, po prostu wykona się w czasie działania jak zwykła funkcja — nie powoduje to błędu.
Preferuj constexpr dla stałych
Używaj constexpr dla rzeczywistych stałych, takich jak rozmiary, wyniki obliczeń matematycznych i tablice wyszukiwania. Jest ono bardziej wyraziste niż const i zapewnia gwarancje czasu kompilacji.
Szybki test
Sprawdź swoją wiedzę na temat constexpr.
Podsumowanie
Dowiedział się Pan, że constexpr umożliwia obliczanie w czasie kompilacji wartości i funkcji, różni się od const (które jedynie zabrania modyfikacji), obsługuje pętle i rekurencję we współczesnym C++ oraz przechodzi do obliczeń w czasie działania, gdy otrzyma dane niebędące stałymi.
Często zadawane pytania
Czy lekcja „constexpr i czas kompilacji” jest bezpłatna?
Tak — pełny tekst „constexpr i czas kompilacji” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C++ Academy, przejdź na CoddyKit PRO. Kurs C++ Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „constexpr i czas kompilacji”?
Obliczaj wartości w czasie kompilacji Ćwiczysz C++ Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C++ Academy?
Nie wymagamy żadnego doświadczenia. C++ Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „constexpr i czas kompilacji”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C++ Academy?
Tak. Każda lekcja C++ Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Zmienne i parametry const
- Funkcje składowe const
- constexpr i czas kompilacji
- consteval i constinit