Мы не можем привязать это к setTimeout()
, поскольку он всегда выполняется с глобальным объектом (Window), если вы хотите получить доступ к контексту this
в функции обратного вызова, а затем с помощью bind()
к функции обратного вызова, которую мы можем достичь как:
setTimeout(function(){
this.methodName();
}.bind(this), 2000);
Перегрузка operator[]
будет выбрана на основе const
-вычисления объекта, который вы вызываете.
Array<> intArray;
intArray[1]; //calls T& operator[]
const Array<> constArray;
constArray[1]; //calls T operator[]
Если вы удалите const
из T operator[]
, вы получим ошибку, потому что функции-члены не могут иметь одинаковые const
-qualification и параметры, поскольку между ними не будет выбора.
В первую очередь рассмотрим []
как синтаксический сахар для вызова this->operator[]
.
Версия const
будет вызываться, если this
является указателем const
, иначе не- const
.
Двигаясь дальше, вы должны использовать const T& operator [](int idx) const {
, т. е. версия const
вернет ссылку const
. Это сохранит накладные расходы на получение глубокой копии.
Наконец, const
-ность функции является частью ее подписи. Это позволяет перегружать на основе const
-ness. В противном случае вы не могли бы иметь две версии operator[]
.
std::vector
возвращает ссылку на константу.
– Raphael Addile
4 January 2016 в 16:32