Зачем это всё? Зачем свой конструктор копии и зачем запрет присваивания?
Или фишка в том, что нельзя поменять? Тогда, по идее, нужен не operator T, а operator const T&
R>З.ы. volatile важен, т.к. обычно его забываешь ставить, и потом в релизе до истины уже не докапаешься.
Ну и название мне не нравится, конечно. Фраза
unused<DWORD> res = GetLastError();
checkError( res );
нифига не читабельная. Может как-то типа debug_variable назвать, например?
R>
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
А вообще, конечно, цель сократить одну строчку ложная.
Другое дело, что волотайл может быть в тему.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
E>Зачем это всё? Зачем свой конструктор копии и зачем запрет присваивания? E>Или фишка в том, что нельзя поменять? Тогда, по идее, нужен не operator T, а operator const T&
думаю, чтобы подавить варнинг неиспользуемой переменной в релизе.
Здравствуйте, night beast, Вы писали:
NB>думаю, чтобы подавить варнинг неиспользуемой переменной в релизе.
Как-то это ненадёжно.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>А вообще, конечно, цель сократить одну строчку ложная.
А что делать, если надо обернуть кучу WinAPI/POSIX, и таких мест дофига?
В паре месте написать лишнюю строчку нормально, но в десятках тоже как-то не очень имвхо...
В релизе переменная тоже нужна, что бы видеть в отладчике или в дампе.
К>В чём прикол с volatile, не понял. И почему нельзя по месту писать unused<volatile T>, если известно, что функция возвращает volatile?
Если переменная используется только в assert'е, или вообще не используется (просто хочется видеть значение в отладчике/дампе), то в релизе её либо вообще не будет, либо она будет замешана где-то в регистрах.
Если же объявлять как:
DWORD volatile err = GetLastError();
То она в релизе не только останется, но даже и отладчик скорее всего будет показывать корректное значение.
Здравствуйте, superlexx, Вы писали:
R>>template<typename T> class unused
S>Проще надо быть:
VERIFY(CloseHandle(x));
Если на результаты хочется посмотреть, то найдёте их в регистрах. GetLastError -- $err,hr в Watch
Это не то.
VERIFY не везде есть.
VERIFY выдаёт мессаджбокс.
В регистрах искать не очень круто при прочих равных.
В регистре значение будет очень не долго, а в дампе его вообще не будет.
Иногда со значением вообще ничего не надо делать, просто что бы было. $err надо успеть сделать, и вообще его надо делать.
Здравствуйте, remark, Вы писали:
R>Это не то. R>VERIFY не везде есть.
#define REMARK_VERIFY
R>VERIFY выдаёт мессаджбокс.
#define REMARK_VERIFY
R>В регистрах искать не очень круто при прочих равных. R>В регистре значение будет очень не долго, а в дампе его вообще не будет.
#define REMARK_VERIFY(x) LBRACE auto tmp = x; assert(x); RBRACE
#define LBRACE do {
#define RBRACE } while(false)
R>Иногда со значением вообще ничего не надо делать, просто что бы было. $err надо успеть сделать, и вообще его надо делать.
Здравствуйте, Vamp, Вы писали:
R>>Иногда приходится писать код типа: V>Я уже всю голову сломал, но так и не понял, зачем такой код приходится писать?
V>Чтоза поведение обеспечивается?
чтобы Visual Studio не выдавал warning когда включен Level 4. Предупреждение будет, типа: «локальная переменная объявлена но не используется»
В>чтобы Visual Studio не выдавал warning когда включен Level 4. Предупреждение будет, типа: «локальная переменная объявлена но не используется»
А, спасибо, понял. Я бы правда скорее подавил предупреждение.
В>>чтобы Visual Studio не выдавал warning когда включен Level 4. Предупреждение будет, типа: «локальная переменная объявлена но не используется» V>А, спасибо, понял. Я бы правда скорее подавил предупреждение.
лучше этого не делать с помощью всяких подавителей иногда можно так и (логическую) ошибку пропустить.
Здравствуйте, remark, Вы писали:
R>З.ы. volatile важен, т.к. обычно его забываешь ставить, и потом в релизе до истины уже не докапаешься.
Идея сохранить удобства дебага в релизе с помощью volatile прикольная — все равно syscall штука недешевая так что запись в переменную считай бесплатно.
Идея не обрабатывать ошибки в релизе достойна порки.
Я не настаиваю на месадж боксах тк пишу и под линупс без гуя но альтернативы всегда есть — логи и тп. Даже если не собираетесь падать эта инфо может быть очень важна.