Когда объект не может быть преобразован в ссылку?

Используйте этот код, но убедитесь, что продолжительность указана в миллисекундах, поэтому, если вы хотите добавить 2 секунды, вам нужно передать 2000, или, если вы передаете секунды, просто добавьте в код длительность * 1000.

function createCookieWithDuration(name, value, duration) {
    const date = new Date();
    console.log(`date now: ${date}`);
    const newDate = new Date(date.getTime() + duration);
    console.log(`adjusted date by ${duration}: ${newDate}`);
    document.cookie = `${name}=${value}; expires=${newDate}; path=/`;
}

7
задан Matt Gallagher 15 January 2009 в 03:41
поделиться

2 ответа

Значение enh::setw(26); rvalue. На самом деле временные файлы как этот являются rvalues. Rvalues имеют специальные свойства. Один из них - то, что их адрес не может быть взят (&enh::setw(26); недопустимо), и они не могут обычно связывать со ссылками на неконстанту (некоторые временные файлы могут связать со ссылками на неконстанту, но они подвергаются специальным правилам: Вызов функций членства на временных объектах и ловле объектов исключения в отношении неконстанты. В последнем случае временный файл даже является lvalue).

Существует два вида выражений: lvalues, которые обозначают объекты (который в свою очередь может сохранить значение) или функции и rvalues, которые предназначены для представления чтения значений из объекта или представленный временными файлами, литералами цифры и константами перечислителя. В C++ 03, чтобы смочь передать такие значения функции, которая принимает ее значение ссылкой, существует правило, что они могут быть приняты в отношении: setw const& p принял бы его. Таким образом, необходимо было бы объявить оператор как это:

EnhSimOutput& operator<< (setw const& p);

Это немного неудачно, потому что Вы не можете снять неоднозначность постоянного lvalues (возражает, что Вы создали на использовании стека const enh::setw e(26); например) и неконстанта или константа rvalues (как enh::setw(26); который является временной неконстантой). Кроме того, если Вы идете этим, параметр не мог назвать функции членства неконстанты на нем, потому что это - ссылка на константу. По этой причине C++ 1x, следующая версия C++, представляет новый вид ссылки, так называемые rvalue-ссылки, который фиксирует это.


Компилятор Microsoft Visual C++ связывает rvalues со ссылками на неконстанту, но выделяет предупреждение при выполнении этого (необходимо использовать, по крайней мере, предупреждение уровня 4 для него для разоблачения). Это неудачно, потому что проблемы повышаются при портировании на другие компиляторы, которые более строги в Стандартном соответствии.

13
ответ дан 6 December 2019 в 12:56
поделиться

Мое предположение - это EnhSimOutput& operator<< (setw& p); передачи ссылкой неконстанты, но значение 26 "константа" в том смысле, что это не может быть изменено. Попытайтесь установить его на EnhSimOutput& operator<< (const setw& p);

или попробуйте

int nNumber = 26;  
enh::eout << enh::setw(nNumber);
3
ответ дан 6 December 2019 в 12:56
поделиться
Другие вопросы по тегам:

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