Это еще один вопрос о встраивании функции.
Но я буду принимать возможные комментарии и ответы сразу:C++ Разве это не бесполезная встроенная декларация?
- Определение функции внутри класса делает его рядный автоматически.
- Такое же поведение может быть достигнуто путем маркировки функции с помощью встроенного вне класса.
- Встроенная функция не обязательно должна быть встроена. Это полностью до компилятора, чтобы встроить его.
Теперь мой вопрос:
Когда встраивание функции означает скопировать тело на место, где она вызывается.
Неправильно ли предположить, что компилятор не будет встроить его, если он обратится к частным или защищенным членам?
Программа в буквальном смысле не сможет получить доступ к элементам правильно?
Я хочу знать, что для меня это должно выглядеть довольно странно, если кто-то строит функцию, которая явно не может быть встроена.
Вот пример:
//Declaration
class Controller
{
public:
bool bHasTarget();
private:
const Object* pTarget;
};
//Definition
inline bool Controller::bHasTarget(){
return !(pTarget == nullptr); //<- This cannot be inlined...Can it?
}
Ну, прежде всего, у вас есть опечатка, которая должна быть '=='. – CoryKramer
компилятор может получить доступ к чему угодно, поэтому он может встраивать все, что угодно (пока он его видит, и здесь pTarget виден компилятору) – Hcorg
Что касается первого пункта, я думаю, вы имеете в виду * определение * функции, а не только объявление ее. –