Вы должны указывать вызов по ссылке в определении функции, а не на фактический вызов. Поскольку PHP начал показывать ошибки устаревания в версии 5.3, я бы сказал, что было бы неплохо переписать код.
В вызове функции нет ссылочного знака - только для определения функций. Определений функций достаточно, чтобы правильно передать аргумент по ссылке. Начиная с PHP 5.3.0 вы получите предупреждение о том, что «call-by-reference-ссылка» устарела, когда вы используете
blockquote>&
вfoo(&$a);
.Например , вместо использования:
// Wrong way! myFunc(&$arg); # Deprecated pass-by-reference argument function myFunc($arg) { }
Использование:
// Right way! myFunc($var); # pass-by-value argument function myFunc(&$arg) { }
Консалтинг C ++ 03, 22.2.2.1.2 / 11, форматы наследуются от scanf
и друзей, которые, в свою очередь, все говорят, что преобразованная последовательность символов «необязательно подписана», даже для тех, у которых нет знака вывод. strtoul
то же самое.
Итак, предположим, вы могли бы сказать, что стандарт, который задает поведение, является C89 для C ++ 03, C99 для C ++ 11.
Поскольку -
оказывается допустимым только как первый символ, я предполагаю, что обходной путь - проверить его с помощью peek
перед использованием operator>>
.
Если я правильно прочитал 22.2.2.1.2 / таблицу 5, это показывает, что извлечение в unsigned эквивалентно scanf
с %u
, которое появляется также , делает отрицательное -> положительное преобразование .
Разве это было бы совсем иначе, если бы вы это сделали?
int i;
unsigned int u;
c >> i;
u = i;
std :: cout << u;
Не имеет большого значения, что operator>>
допускает несоответствие знака, поскольку базовые правила C позволят сделать молчащее преобразование в любом случае.
Это говорит о том, что my gcc (4.3.5 на Solaris) говорит, что это ошибка преобразования.
g3]