this, раз это указатель на экземпляр класса, то он неявно передаётся во всех методах, которые мы называем не static, а static это лишь указание компилятору, что для этого метода класса не нужно вставлять this в качестве параметра в начале, с другой стороны зачем передавать этот указатель, если компилятор по факту знает адрес переменной заранее - относительно начала стека или относительно переменной указателя, хранящегося в стеке, на выделенную память в куче. Значит эта операция как бы consteval, говоря современным С++, вопрос - действительно ли компилятор всегда знает относительное расположение переменной и оптимизирует все this никогда реально не передавая их в качестве параметра или есть исключения? И вообще правильно ли так понимать это
А как иначе обеспечить возможность вызова по указателю на метод?
Нет, не всегда знает, иначе не надо было бы передавать this
так вопрос и есть в том, передаётся ли он
Я вообще отказываюсь это понимать. Расположение переменной this относительно чего должен компилятор знать?
Он передаётся. И должен передаваться. Потому что это идентификатор объекта, с которым работает метод. С чего ты взял, что this вдруг может не передаваться в нестатический метод класса -- я не понимаю.
бешенная погоня за оптимизациями — очевидно же)
относительно начала стека или указателя на выделенную память
С какого ..... объект по твоему вообще обязан быть в стеке, и где б... НАЧАЛО СТЕКА?
потому что он известен на этапе компиляции и если представить стек как массив то можно подставить stackPtr[Number] вместо this, т.к. number известно
класс компилится в одном TU, а используется в другом или даже бибилитеке, которая скомпилена где-то в другом месте, как теперь бибилиотека или другой TU узнает, откуда со стека ему взять этот this?
Нет, он не известен на этапе компиляции. Так что давай ты кончишь нести свою чушь и мы закроем тему.
А где стек начинается-то?
по такой логике вообще все переменные "известны" на этапе компиляции :))
Обсуждают сегодня