Jeśli masz metodę i chcesz dać kompilatorowi wskazówkę, że warto ją wstawić, masz obecnie dwa rozwiązania. Pierwszym z nich jest zdefiniowanie metod, gdy deklarują swoją klasę:Metoda wewnętrzna: definicja klasy wewnętrznej i zewnętrznej
class Vector {
private:
double* data_;
double* size_;
double* capacity_;
public:
double& operator[](int k) {
return data_[k];
}
...
}
Ponieważ metoda ta może zmniejszyć czytelność, innym rozwiązaniem jest użycie słowa kluczowego inline
i zdefiniować metodę Spośród zajęć:
class Vector {
private:
double* data_;
double* size_;
double* capacity_;
public:
inline double& operator[](int k);
...
}
double& Vector::operator[](int k) {
return data_[k];
}
Dzięki temu kod jest bardziej czytelny (przynajmniej ja go lubię). Czytając moją implementację STL, stwierdziłem, że używają one kombinacji dwóch. Niektóre metody (te, o których myślę, że powinny być rzeczywiście inline) są zdefiniowane w klasie, a inne są zdefiniowane poza klasą za pomocą wbudowanego słowa kluczowego. Plik rozpoczyna się także od skomentowanej deklaracji klasy.
Moje pytanie jest następujące. Czy obecne kompilatory (myślę o GCC, Clang, Intel i Visual Studio) są bardziej skłonne do wstawiania funkcji składowej, która jest zadeklarowana w klasie, niż funkcja składowa zadeklarowana poza klasą ze słowem kluczowym inline?
Uwaga: to pytanie nie jest duplikatem When should I write the keyword 'inline' for a function/method?, ponieważ moje pytanie dotyczy implementacji kompilatora. Czy te dwa sposoby powiedzenia, że funkcje te mają być inklinowane, są równoważne. Sposób, w jaki napisano STL sugeruje, że tak nie jest.
Prawdopodobny duplikat http://stackoverflow.com/questions/1759300/when-should-i-write-the-keyword-inline-for-a-function-method – dhke