Inline
- C++ kursu
- Uzman
- Ders 28/47
- 5 dk
inline anahtar kelimesi ve linker etkisini öğrenirsin.
Inline
inline anahtar kelimesi, bir fonksiyonun çeşitli derleme birimlerinde tanımlanmasına izin verir; ODR (One Definition Rule) kısıtını gevşetir. Derleyici, fonksiyon çağrısını gövdeyle değiştirmeye karar verebilir, ama bu karar derleyiciye aittir.
Modern C++'ta inline aslında bir hız ipucu değil, ODR gevşeticidir. Derleyici -O2 ve üstünde zaten en iyi kararı verir. __attribute__((always_inline)) (GCC/Clang) ise zorunlu inline yapar; ama yanlış kullanırsa kod şişer ve cache dostluğu bozar.
ODR gevşetme
Normalde bir fonksiyonun yalnızca bir tanımı olabilir (ODR). Ama inline fonksiyonlar birden çok derleme biriminde tanımlanabilir; bağlayıcı bunları birleştirir. Bu, başlık dosyasında fonksiyon tanımı yapmaya izin verir.
Örnek: bir utils.hpp başlığında inline int square(int x) { return x * x; } yazarsın. Bu başlığı iki .cpp dosyası içermelidir; her ikisi de tanımı gördüğü için bağlama hatası olmaz. inline olmadan bu bir ODR ihlali olurdu.
Uygulama inline square yaz
inline int square(int x) yaz; gövdesi return x * x;. main içinde std::cout << square(6); yaz.
Başlangıç kodu
#include <iostream>
// inline square fonksiyonunu buraya tanımla
int main() {
// square'i çağır ve yazdır
return 0;
}Örnek çözüm
#include <iostream>
inline int square(int x) {
return x * x;
}
int main() {
std::cout << square(6);
return 0;
}Beklenen çıktı
36
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 inline anahtar kelimesi modern C++'ta ne yapar?
inline int square(int x) { return x * x; }- Sadece hızı artırır
- Kodu siler
- Sınıfları kaldırır
- ODR kısıtını gevşetir, derleyici inline kararını verir Doğru cevap
Açıklama: inline, ODR kısıtını gevşetir; hız kararı derleyiciye aittir.
2 inline fonksiyonu tamamla
inline int square(int x) { return x * ____; }
inline int square(int x) { return x * x; }
Açıklama: return x * x; yazılır; inline square karesini hesaplar.
3 Aracı rolüne eşle
| Kavram | Anlamı |
|---|---|
inline |
ODR gevşetme |
__attribute__((always_inline)) |
Zorunlu inline |
-O0 |
Inline kapalı |
-O2 |
Inline açık |