Здравствуйте, Ignoramus, Вы писали:
I>Здравствуйте, Yacha, Вы писали:
Y>>Всем доброго времени суток!
Y>>Хотелось бы разъеснить следующую ситуацию:
Y>>Y>>template<typename T>
Y>>void foo(T t)
Y>>{
Y>> t = 1;
Y>>}
Y>>...
Y>>int i = 0;
Y>>int &ii = i;
Y>>foo(ii);//здесь передается по значению, а хотелось бы по ссылке
Y>>
I>Это почему ты так решил? Здесь передается по значению, а значение копируется через ссылку, но это уже детали, не имеющие к foo отношения.
Тип T должен выводиться на основании типа аргумента t, если я не прав, то поправте меня, в приведенном случае типом аргумента является
int &
Y>>Я понимаю, что правильным было бы template<typename T> void foo(T& t) { t = 1; }
, но
Y>>почему в первом случае T не может быть int& ?
I>Тут нет правильного или неправильного. Следует сделать так, как тебе нужно