2016-06-03 10 views
0

Я не понимаю, как использовать авто в функции, которую я просматриваю. Учитывая параметр определяется как:делает автоматически вывод, что тип является указателем?

someFunction(const unique_ptr<BSTNode<int>>& node, paramType param) {

тело функции устанавливает локальную переменную так:

auto *localNode = node.get();

Мое понимание авто является то, что он выводит тип, что присваивается к нему во время компиляции. Документы утверждают, что unique_ptr::get() возвращает указатель на объект, которым он управляет. Учитывая этот факт, почему необходимо добавить * в объявление переменной?

ответ

3

Почему необходимо добавить * в объявление переменной?

Это не так. Преимуществом является то, что читателю чрезвычайно очевидно, что localNode является указателем.

+0

, но если auto уже выводит тип указателю, чем добавляет дополнительный * не результат типа **? –

+0

@ user5797668 Нет, 'auto' не означает« тип инициализатора »; это означает примерно «любой тип, который необходим для того, чтобы тип всей вещи соответствовал типу инициализатора». –

3

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