Как записать литерал интервала короткого целого без знака?

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

, Возможно, Вы могли:

Просто проверяют "победителя" путем проверки, что это - IP, разоблачает меньше, чем значение определенного порога в журналах (я использую "grep | туалет-l" для получения количества). Если это по Вашему порогу, временно блок что IP (час или так?).

Дисквалифицируют любого "победителя" с тем же адресом поставки или информацией об оплате как "последний" победитель, или это победило в течение определенного периода времени для распространения "победы" вокруг.

боты не получат их всех тот путь.

Для раздражения дерьма из скребков: , Когда "случайное дерьмо" объект повышается, работает, вывод HMTL для этого пролистывают "код obfuscator"..., который не изменяется, "дисплей" страницы... просто скремблирует код со случайным образом сгенерированным Ids и т.д.

Более коварный:

Увеличение цена взимала за "выигранный" объект на основе того, сколько раз IP победы разоблачает в журналах. Затем, даже если боты побеждают, вы тоже. :-)

37
задан unwind 26 August 2009 в 10:16
поделиться

7 ответов

Вы не можете. Числовые литералы не могут иметь тип short или unsigned short .

Конечно, чтобы присвоить bar , значение литерала неявно преобразуется в беззнаковый короткий . В вашем первом примере кода вы можете сделать это преобразование явным с помощью приведения, но я думаю, что уже довольно очевидно, какое преобразование будет иметь место. Приведение потенциально хуже, поскольку с некоторыми компиляторами оно подавляет любые предупреждения, которые будут выдаваться, если буквальное значение выходит за пределы диапазона unsigned short . Затем снова, если вы хотите, чтобы использовал такое значение по уважительной причине, тогда подавление предупреждений - это хорошо.

В примере в вашей редакции, где это функция шаблона, а не перегруженная функция, у вас есть альтернатива приведению: do_something (23) . С перегруженной функцией вы все равно можете избежать приведения с помощью:

void (*f)(unsigned short) = &do_something;
f(23);

... но я не советую этого. По крайней мере, это работает только в том случае, если версия unsigned short действительно существует, тогда как вызов с приведением выполняет обычное разрешение перегрузки для поиска наиболее совместимой доступной версии.

у вас есть альтернатива приведению: do_something (23) . С перегруженной функцией вы все равно можете избежать приведения с помощью:

void (*f)(unsigned short) = &do_something;
f(23);

... но я не советую этого. По крайней мере, это работает только в том случае, если версия unsigned short действительно существует, тогда как вызов с приведением выполняет обычное разрешение перегрузки для поиска наиболее совместимой доступной версии.

у вас есть альтернатива приведению: do_something (23) . С перегруженной функцией вы все равно можете избежать приведения с помощью:

void (*f)(unsigned short) = &do_something;
f(23);

... но я не советую этого. По крайней мере, это работает только в том случае, если версия unsigned short действительно существует, тогда как вызов с приведением выполняет обычное разрешение перегрузки для поиска наиболее совместимой доступной версии.

35
ответ дан 27 November 2019 в 04:53
поделиться
unsigned short bar = (unsigned short) 23;

или по-новому ....

unsigned short bar = static_cast<unsigned short>(23);
10
ответ дан 27 November 2019 в 04:53
поделиться

Для беззнакового сокращения нет модификаторов. Целые числа, которые по умолчанию имеют тип int , обычно без проблем неявно конвертируются в целевой тип. Но если вы действительно хотите явно указать тип, вы можете написать следующее:

unsigned short bar = static_cast<unsigned short>(23);

Как я вижу, единственная причина состоит в том, чтобы использовать такую ​​индикацию для правильного вывода типа шаблона:

func( static_cast<unsigned short>(23) );

Но для такого случая более понятным был бы call like следующее:

func<unsigned short>( 23 );
2
ответ дан 27 November 2019 в 04:53
поделиться

К сожалению, для этого определен единственный метод -

Один или два символа в одинарных кавычках. ('), которому предшествует буква L

Согласно http://cpp.comsci.us/etymology/literals.html

Это означает, что вам нужно будет представить свой номер как escape-последовательность ASCII:

unsigned short bar = L'\x17';
0
ответ дан 27 November 2019 в 04:53
поделиться

К сожалению, они могут т. Но если люди просто смотрят на два слова за числом, они должны ясно видеть, что это короткое ... Это не НАСТОЛЬКО двусмысленно. Но было бы неплохо.

0
ответ дан 27 November 2019 в 04:53
поделиться

Если вы выразите количество как 4-значное шестнадцатеричное число, краткость без знака может быть более ясной.

unsigned short bar = 0x0017;

0
ответ дан 27 November 2019 в 04:53
поделиться

Вам, вероятно, не стоит использовать короткие, если их у вас не очень много. Он предназначен для использования меньшего объема памяти, чем int, но этот int будет иметь «естественный размер» для архитектуры. Из этого логически следует, что короткое, вероятно, нет. Подобно битовым полям, это означает, что короткие позиции можно рассматривать как компромисс между пространством и временем. Обычно это того стоит, только если за это нужно много места. Однако в вашем приложении вряд ли будет очень много литералов, поэтому не было необходимости в использовании коротких литералов. Сценарии использования просто не пересекались.

0
ответ дан 27 November 2019 в 04:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: