Нужна помощь в отладке & ldquo; невозможно преобразовать 'const int' в 'int & amp;' & rdquo; [Дубликат]

Мы не можем привязать это к setTimeout(), поскольку он всегда выполняется с глобальным объектом (Window), если вы хотите получить доступ к контексту this в функции обратного вызова, а затем с помощью bind() к функции обратного вызова, которую мы можем достичь как:

setTimeout(function(){
    this.methodName();
}.bind(this), 2000);
9
задан Mojo28 4 January 2016 в 15:22
поделиться

2 ответа

Перегрузка operator[] будет выбрана на основе const -вычисления объекта, который вы вызываете.

Array<> intArray;
intArray[1]; //calls T& operator[]

const Array<> constArray;
constArray[1]; //calls T operator[]

Если вы удалите const из T operator[], вы получим ошибку, потому что функции-члены не могут иметь одинаковые const -qualification и параметры, поскольку между ними не будет выбора.

12
ответ дан TartanLlama 22 August 2018 в 15:18
поделиться

В первую очередь рассмотрим [] как синтаксический сахар для вызова this->operator[].

Версия const будет вызываться, если this является указателем const, иначе не- const.

Двигаясь дальше, вы должны использовать const T& operator [](int idx) const {, т. е. версия const вернет ссылку const. Это сохранит накладные расходы на получение глубокой копии.

Наконец, const -ность функции является частью ее подписи. Это позволяет перегружать на основе const -ness. В противном случае вы не могли бы иметь две версии operator[].

12
ответ дан Bathsheba 22 August 2018 в 15:18
поделиться
  • 1
    Я бы даже назвал возвращение временным, а не const ссылкой на конструктивный запах / ошибку здесь, поскольку это приводит к несоответствиям, т. Е.: почему я не могу использовать аргументы const в memcpy? Нужно ориентироваться на стандартном библиотека для предотвращения неожиданного поведения, а std::vector возвращает ссылку на константу. – Raphael Addile 4 January 2016 в 16:32
Другие вопросы по тегам:

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