Почему 'это' - указатель и не ссылка?

Если вы не хотите встраивать функцию обратного вызова в вашу функцию, вы можете определить ее до, а затем назначить ее указанному месту назначения.

function Callback(self, a, b)
   -- do your work ...
end

function CallbackUser1()
    targetTable = { }
    targetTable.entry = Callback
end

function CallbackUser2()
    otherTargetTable = { }
    otherTargetTable.entry = Callback
end

Это решение требует, чтобы аргументы всегда были одинаковыми.

Примечание: Все следующие определения идентичны

function Table:func(a, b) ... end
function Table.func(self, a, b) ... end
Table.func = function(self, a, b) ... end
178
задан Boann 20 March 2019 в 19:20
поделиться

2 ответа

Когда язык сначала развивался в ранних выпусках с реальными пользователями, не было никаких ссылок, только указатели. Ссылки были добавлены, когда перегрузка оператора была добавлена, поскольку она требует, чтобы ссылки последовательно работали.

Одно из использования this для объекта получить указатель на себя. Если бы это была ссылка, то мы должны были бы записать &this. С другой стороны, когда мы пишем оператор присваивания, мы имеем к return *this, который выглядел бы более простым как return this. Таким образом, если бы у Вас был пустой большой список, то Вы могли бы обсудить это так или иначе. Но C++, развиваемый постепенно в ответ на обратную связь от сообщества пользователей (как большинство успешных вещей). Значение обратной совместимости полностью сокрушает незначительные преимущества/недостатки, происходящие от this являющийся ссылкой или указателем.

170
ответ дан Daniel Earwicker 23 November 2019 в 20:16
поделиться

Немного поздно стороне... Прямо из первых уст вот то, что Bjarne Stroustrup должен сказать (который по существу повторен в или взят от "Дизайна и Эволюции C++" книга):

, Почему "это" не ссылка?

, поскольку "это" было введено в C++ (действительно в C с Классами), прежде чем ссылки были добавлены. Кроме того, я выбрал "это" для следования за использованием Simula, а не (более поздним) использованием Smalltalk "сам".

114
ответ дан Roger Olsson 23 November 2019 в 20:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: