Если у вас есть метод, и вы хотите дать компилятору намек на то, что это хорошая идея, чтобы встраивать его, в настоящее время у вас есть два решения. Первый - определить методы при объявлении вашего класса:
class Vector {
private:
double* data_;
double* size_;
double* capacity_;
public:
double& operator[](int k) {
return data_[k];
}
...
}
Поскольку этот метод может уменьшить читаемость, другим решением является использование ключевого слова inline
и определение метода вне класса:
class Vector {
private:
double* data_;
double* size_;
double* capacity_;
public:
inline double& operator[](int k);
...
}
double& Vector::operator[](int k) {
return data_[k];
}
Это делает код более читаемым (по крайней мере, я предпочитаю его). Читая мою STL, я обнаружил, что они используют сочетание двух. Некоторые методы (те, которые, как мне кажется, действительно должны быть встроены), определены в классе, а другие определены вне класса с ключевым словом inline. Файл также начинается с прокомментированного объявления класса.
Итак, мой вопрос следующий. У меня есть текущие компиляторы (я думаю о GCC, Clang, Intel и Visual Studio) с большей вероятностью встроят функцию-член, объявленную внутри класса, чем объявленная функция-член класса с ключевым словом inline?
Примечание. Этот вопрос не является дубликатом Когда следует писать ключевое слово 'inline' для функции/метода?, так как мой вопрос касается реализаций компилятора. Эти два способа сказать, что вы хотите, чтобы эти функции были встроены, эквивалентны. То, как написано STL, говорит о том, что это не так.