Лучший (и единственный) метод - установить правильные заголовки HTTP, в частности, следующие: «Истекает», «Последнее изменение» и «Кэш-контроль». Как это сделать, зависит от используемого вами серверного программного обеспечения.
В улучшении производительности и hellip; найдите «Оптимизацию на стороне сервера» для общих соображений и соответствующих ссылок и для «кеша на стороне клиента» для конкретных советов Apache.
Если вы поклонник Улучшение производительности и hellip; (или nginx на простом английском языке), как и я, вы также можете легко настроить его:
location /images {
...
expires 4h;
}
В приведенном выше примере любой файл из / images / будет кэшироваться на клиенте в течение 4 часов.
Теперь, когда вы знаете правильные слова для поиска (заголовки HTTP «Expires», «Last-Modified» и «Cache-Control»), просто просмотрите документацию используемого веб-сервера.
Поскольку строка назначается из char
, а int
неявно конвертируется в char
.
Класс std :: string имеет следующий оператор присваивания:
string & amp; operator = (char ch);
Этот оператор вызывается неявным преобразованием unsigned int
в char
.
В вашем третьем случае, вы используете явный конструктор для создания экземпляра std :: string
, ни один из доступных конструкторов не может принять unsigned int
или использовать неявное преобразование из unsigned int [ ! d5]:
string (); string (const string & amp; s); string (size_type length, const char & amp; ch); string (const char * str); string (const char * str, size_type length); string (const string & amp; str, size_type index, size_type length); string (начало ввода входного сигнала, конец ввода);
Это вызов operator = (char ch) - мой отладчик вступил в это. И мой MS VS 2005 компилируется следующим образом без ошибок.
std :: string my_string (""); unsigned int my_number = 1234; my_string = my_number; my_string.operator = (my_number);
Я могу объяснить первую и третью ситуации:
my_string = 1234;
Это работает, потому что строка имеет переопределенный оператор = (char). Фактически вы назначаете символ (с переполнением данных) в строку. Я не знаю, почему второй случай приводит к ошибке компиляции. Я пробовал код с GCC, и он компилируется.
std :: string my_string (1234);
не будет работать, потому что нет конструктора строк, который принимает аргумент char или int.
my_string.operator = (my_number)
явный вызов оператора=
? Что я не понимаю здесь? – sbi 24 July 2009 в 14:44