c ++ 0x почему переменные "auto" в цикле for на основе Range передаются в тело цикла как значения, а не как ссылки? - PullRequest
3 голосов
/ 23 июня 2011

У меня была ошибка, потому что это, и это заставило меня задуматься, почему это было разработано таким образом. Я чувствую, что было бы лучше, чтобы auto что-то: контейнер производил ссылки, а не значения. Например:

int t[3]{11,22,33};
for(int& el:t2)
    el*=2;

дает 22,44,66

int t[3]{11,22,33};
    for(auto el:t2)
        el*=2;

"ничего не делает".

Ответы [ 2 ]

11 голосов
/ 23 июня 2011

auto в случае, который вы описываете, выводит, что тип был int. Если вы хотите превратить это в ссылку, вы можете использовать auto&.

Если компилятор C ++ будет использовать специальные правила только потому, что он находится в цикле for, правила будут крайне запутанными.

auto i = t[1];

совпадает с

int i = t[1];

То же самое и здесь, если вы хотите ссылку, вы должны указать, что вы хотите ссылку.

4 голосов
/ 23 июня 2011

auto всегда выводит тип значения. Это тот же механизм, что и в шаблоне, например template<typename F> void foo(T t).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...