Это зависит. Не существует универсального ответа, который всегда будет правдой.
В Java JIT-компилятор, вероятно, рано или поздно вставит его . Насколько я знаю, JIT-компилятор JVM оптимизирует только интенсивно используемый код, так что вы могли видеть издержки при вызове функции изначально, до тех пор, пока метод get / setter не был вызван достаточно часто.
В C ++ он почти наверняка будет встроенным (при условии, что оптимизация включена). Однако есть один случай, когда этого, вероятно, не будет:
// foo.h
class Foo {
private:
int bar_;
public:
int bar(); // getter
};
// foo.cpp
#include "foo.h"
int Foo::bar(){
return bar_;
}
Если определение функции невидимо для пользователей класса (который будет включать foo.h, но не будет видеть foo.cpp), то компилятор не сможет встроить вызов функции.
MSVC должен иметь возможность встроить его, если генерация кода времени соединения включена в качестве оптимизации. Я не знаю, как GCC решает эту проблему.
По сути, это также означает, что, если получатель определен в другом .dll / .so, вызов может не быть встроенным.
В любом случае, я не думаю, что тривиальные get / setters обязательно являются «хорошей практикой ООП», или что есть «все другие причины их использования». Многие люди считают тривиальные get / setters для 1) признаком плохого дизайна и 2) пустой тратой текста.
Лично это не то, что меня беспокоит в любом случае. Для меня, чтобы что-то квалифицировать как «хорошую ООП-практику», оно должно иметь определенные количественные положительные эффекты. Тривиальные методы получения / установки имеют некоторые незначительные преимущества, а некоторые - столь же незначительные недостатки. Поэтому я не думаю, что это хорошая или плохая практика. Это просто то, что вы можете сделать, если действительно хотите.