Форум программистов, компьютерный форум CyberForum.ru

Странный код - C++

Восстановить пароль Регистрация
 
ramybozy
8 / 8 / 0
Регистрация: 01.07.2012
Сообщений: 138
26.12.2012, 19:06     Странный код #1
Почему такой код верен

C++
1
2
3
4
5
6
7
time_t start, end;
start = time(NULL);
if (start == (time_t) - 1)
   {
      cout << "Time is unavailable" << endl;
      exit(EXIT_FAILURE);
}
Непонятно как из типа можно вычесть единицу.

Пример взят из книги Исскуство программирования на C, стр. 85.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2012, 19:06     Странный код
Посмотрите здесь:

C++ Странный цикл for
C++ Странный поиск
C++ Странный вывод - проверьте код
Странный конструктор C++
Странный код в лабе (динам. масиивы) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
26.12.2012, 19:22     Странный код #2
Приведение -1 к типу time_t.
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
26.12.2012, 19:23     Странный код #3
-1 приводится к типу time_t
ramybozy
8 / 8 / 0
Регистрация: 01.07.2012
Сообщений: 138
26.12.2012, 19:26  [ТС]     Странный код #4
А,, вот оно в чем дело, то есть можно и так:
C++
1
static_cast<time_t>(-1);
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
26.12.2012, 19:28     Странный код #5
Цитата Сообщение от ramybozy Посмотреть сообщение
Непонятно как из типа можно вычесть единицу.
Не из типа вычесть единицу, а минус один привести к типу.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.12.2012, 19:34     Странный код #6
ramybozy, пробел лишний.
ramybozy
8 / 8 / 0
Регистрация: 01.07.2012
Сообщений: 138
26.12.2012, 19:37  [ТС]     Странный код #7
Да понял уже. Это не у меня лишний, а так в книге напечатано, что вот и впал я в недоумение.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.12.2012, 19:44     Странный код #8
ramybozy, сами могли бы догадаться, что это проверка на ошибку.
ramybozy
8 / 8 / 0
Регистрация: 01.07.2012
Сообщений: 138
26.12.2012, 19:46  [ТС]     Странный код #9
Ну и на старуху бывает проруха (не догадался вот).
0x10
26.12.2012, 19:49
  #10

Не по теме:

int n = 10;
while (n --> 0) { // пока n стремится к нулю xD

taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
26.12.2012, 19:51     Странный код #11
А есть такой оператор?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.12.2012, 20:03     Странный код #12
Цитата Сообщение от taras atavin Посмотреть сообщение
А есть такой оператор?
Там два оператора
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
26.12.2012, 20:05     Странный код #13
А какой второй?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.12.2012, 20:11     Странный код #14
Цитата Сообщение от taras atavin Посмотреть сообщение
А какой второй?
А не видно разве? Первый это декремент, второй оператор сравнения.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
26.12.2012, 20:17     Странный код #15
А я уж думал, что вычитание обращения к члену.
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
26.12.2012, 20:43     Странный код #16
Странный код это
C++
1
2
3
iconv_t cd;
cd = iconv_open("CP1251", "UTF-8");
if( cd == (iconv_t)(-1) )
В замешательство кинул когда увидел ...

C++
1
typedef void* iconv_t;
Почему для таких случаев не предусмотрели константы странно...
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.12.2012, 21:00     Странный код #17
Avazart, я вас не понял
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
26.12.2012, 21:02     Странный код #18
C++
1
#define ICONV_ERROR -1
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
26.12.2012, 21:15     Странный код #19
Avazart, зачем?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2012, 21:16     Странный код
Еще ссылки по теме:

Странный цикл for С++ C++
C++ Странный калькулятор
C++ Странный вывод

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
26.12.2012, 21:16     Странный код #20
Как зачем?
Чтоб -1 не было магическим числом преобразованным в магический тип
Yandex
Объявления
26.12.2012, 21:16     Странный код
Ответ Создать тему
Опции темы

Текущее время: 01:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru