CodeBlanks Logo Icon CodeBlanks

Inline

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

main.cpp
#include <iostream>

// inline square fonksiyonunu buraya tanımla

int main() {
    // square'i çağır ve yazdır
    return 0;
}

Örnek çözüm

main.cpp
#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?

main.cpp
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

Soru
inline int square(int x) { return x * ____; }
Cevap
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

Uzman bölümündeki tüm dersler