Разница между вектором и его ссылкой при отладке - PullRequest
0 голосов
/ 29 декабря 2018

Сама программа проста

template <typename T>
void foo(std::vector<T>& data) {
   // ...
}

и

template <typename T>
void bar(std::vector<T> data) {
   // ...
}

Я пытаюсь отладить эти две функции в CLion, но информация о переменной data совершенно другая.

Если передать по значению (bar), data - это именно то, что я передал.Однако при передаче по ссылке (foo) размер data всегда равен 1 и объединяется с итераторами __begin__ и __end__, а не с явно заданными значениями.

Итак, если reference это просто alias, почему reference вызывает такую ​​разницу?

При доступе к data внутри двух функций они ведут себя одинаково.Меня смущает то, что стили отладки отображаются по-разному.

Отладка для foo:

enter image description here

Отладка для bar:

enter image description here

...