Значение * & и ** & в C ++

Существует плагин jQuery для общего случая прокрутки к элементу DOM, но если производительность является проблемой (и когда это нет?), я предложил бы делать его вручную. Это включает два шага:

  1. Нахождение положения элемента Вы прокручиваете к.
  2. Прокрутка к той позиции.

quirksmode дает хорошее объяснение механизма позади первого. Вот мое предпочтительное решение:

function absoluteOffset(elem) {
    return elem.offsetParent && elem.offsetTop + absoluteOffset(elem.offsetParent);
}

Это использует кастинг от пустого указателя до 0, который не является надлежащим этикетом в некоторых кругах, но мне нравится он:) Второе использование части window.scroll. Таким образом, остальная часть решения:

function scrollToElement(elem) {
    window.scroll(absoluteOffset(elem));
}

Вуаля!

52
задан fragilewindows 16 August 2016 в 19:28
поделиться

2 ответа

Как правило, можно считать объявление переменной справа налево. Поэтому в случае int *ptr;, это означает, что Вы имеете Указатель * к Целочисленная переменная int. Также, когда это объявило int **ptr2;, это Переменная указателя * к Переменная указателя * указывающий Целочисленная переменная int, который совпадает с "(int *)* ptr2;"

Теперь, после синтаксиса путем объявления int*& rPtr;, мы говорим, что это Ссылка & к Указатель *, который указывает на переменная из типа int. Наконец, можно применить снова этот подход также для [1 112] заключение, что он имеет значение Ссылка & к Указатель * к Указатель * к Целое число int.

0
ответ дан 7 November 2019 в 09:12
поделиться

Этот *& в теории, а также в практическом ее возможное и названный как ссылка на переменную указателя. и это - действие как то же. Этот *& комбинация используется в в качестве параметра функции для 'передачи' определением типа. в отличие от этого, ** может также использоваться для объявления двойной переменной указателя.
передача параметра разделена на передача значением, передача ссылкой, передача указателем . существует различный ответ о "передаче" доступными типами. однако основное, которого мы требуем для понимания для этой темы.

передача ссылкой -> обычно воздействует на уже созданную переменную, рецензируемую при передаче функции, например, fun(int &a);

, передача указателем -> Управляет на уже инициализированной 'переменной указателя / переменным адресом, передающим для функционирования, например, fun(int* a);

auto addControl = [](SomeLabel** label, SomeControl** control) {
    *label = new SomeLabel;
    *control = new SomeControl;
    // few more operation further.
};

addControl(&m_label1,&m_control1);
addControl(&m_label2,&m_control2);
addControl(&m_label3,&m_control3);

в вышеупомянутом примере (это - реальная проблема, с которой я столкнулся), я пробую к init немногих переменная указателя от функции лямбды, и для этого мы должны передать его двойным указателем, так, чтобы шел с d-ссылкой указателя для ее всего использования в той лямбде +, в то время как передающий указатель в функции, которая берет двойной указатель, необходимо передать ссылку на переменную указателя.

так с этой ссылкой того же самого на переменную указателя, *& эта комбинация помогает. в ниже уступленного дорогу для того же примера я упомянул выше.

auto addControl = [](SomeLabel*& label, SomeControl*& control) {
        label = new SomeLabel;
        control = new SomeControl;
        // few more operation further.
    };

addControl(m_label1,m_control1);
addControl(m_label2,m_control2);
addControl(m_label3,m_control3);

, таким образом, здесь Вы видите, что ни требуете d-ссылки, ни мы требуем для передачи ссылки на переменную указателя при передаче в функции, поскольку текущая передача типом является уже ссылочной к указателю.

Hope это помогает :-)

0
ответ дан 7 November 2019 в 09:12
поделиться
Другие вопросы по тегам:

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