2009-02-15 1 views

ответ

4

Да, мы можем.
И он также работает с std::vectors (и поскольку похоже, что вы используете цифровые клавиши, вы можете использовать их вместо них).

+1

Будьте осторожны с вектором :: Итератор, хотя (разыменование его не дает ссылки) – 2009-02-15 14:06:19

2

Да.

Это не отличается от ввода m [1] = "xyz". Компилятор сократит все до примерно того же уровня, как только он закончит с ним.

1

Слово совета: Возможно, вы захотите передать его как указатель, а не ссылку. Я делаю это, чтобы сделать более очевидным случайный читатель, что он будет изменен.

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

Но кроме этого, да, это совершенно легальный код!

+1

Я почтительно не согласен с вашим советом. Я предпочитаю ссылки, если в некоторых случаях я не поставлю нулевой указатель. В противном случае я боюсь, что я просто создаю еще один возможный способ злоупотребления кодом, а именно с нулевым указателем вместо действительной ссылки ... –

+0

1: Вы можете передать нулевую ссылку. Он нарушает языковой протокол, но это можно сделать. Он использует разыменованный нуль, который является coredumps. 2: assert (x! = NULL) имеет низкие накладные расходы. 3: В точке вызова рассмотрите foo (bar); vs foo (&bar);.Это и дает понять, что панель изменена. Мое мнение. Мои $ 0,02. –

0

Да, это нормально - как все уже сказали, и, кроме того, ваш компилятор скажет вам, нет ли этого. Вы можете немного поэкспериментировать; попробуйте передать «hello» или (42) в foo (строка &), чтобы получить представление о предупреждениях, которые дает ваш компилятор.

Смежные вопросы