Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как записать в булевскую переменную ее отрицание, попроще 
V
    Опции темы
JackYF
Дата 14.5.2008, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Rififi, не могу одобрить... нестандартно, требует дополнительный код. Ссылка, имхо, лучше.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MTWizard
Дата 14.5.2008, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 8.10.2007
Где: Київ

Репутация: 3
Всего: 4



Цитата(Alek86 @  14.5.2008,  16:35 Найти цитируемый пост)
хотя нет, противоречитесли в true вместо единицы будет двойка, то ^=1 не поможет

В bool по стандарту лежат только true и false. Там нет чисел (пункт 3.9.1/6). true конвертируется в число 1, false в 0 (пункт 4.5/4). Для этих чисел получим 1^1 = 0 -> false, 0^1 = 1 -> true (как ты сам привёл в цитате). Так что всё по стандарту  smile

Это сообщение отредактировал(а) MTWizard - 14.5.2008, 19:03
PM MAIL   Вверх
nickless
Дата 14.5.2008, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 19
Всего: 181



Цитата(Alek86 @  14.5.2008,  12:08 Найти цитируемый пост)
есть ли в С++ стандартный способ поменять ее значение, не требующий писать вот ЭТО 2 раза?

А как насчет варианта перепроектировать это дело чтобы не надо было тянутся за переменными (я так понимаю там не только тот bool smile ) через дальний восток? smile 


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
mes
Дата 14.5.2008, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Rififi @  14.5.2008,  18:45 Найти цитируемый пост)
enum Bool
{ Invert };

bool& operator<<(bool& b, Bool)
{ return b = !b; }

bool b = true;
b << Invert;

или так 
Код

inline bool bool_invert (bool& b) { return b=!b; }
inline bool bool_invert (const bool& b) { return !b; }


Это сообщение отредактировал(а) mes - 14.5.2008, 20:10


--------------------
PM MAIL WWW   Вверх
Alek86
Дата 15.5.2008, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(nickless @  14.5.2008,  19:29 Найти цитируемый пост)
А как насчет варианта перепроектировать это дело чтобы не надо было тянутся за переменными (я так понимаю там не только тот bool  ) через дальний восток? 

прога не моя и немного великовата для перепроектирования
и даже если была бы моя и сравнительно мелкая, то перепроектиролвать удобнее вряд ли можно было

Цитата(MTWizard @  14.5.2008,  19:00 Найти цитируемый пост)
(пункт 4.5/4).

это единственное, чего я добивался

и вообще весь вопрос был - как ПОПРОЩЕ стандартно инвертировать переменную
про ссылки и доп. функции смотрите первый пост

ЗЫ. жаль, что читающий такой код
Код
bool b = true;
//...
b ^= 1;

будет долго вдуплять, что сие значит
придется таки функцию писать :(


--------------------
user posted image    user posted image
PM MAIL   Вверх
mes
Дата 15.5.2008, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Alek86 @  15.5.2008,  10:09 Найти цитируемый пост)
будет долго вдуплять, что сие значит
придется таки функцию писать :( 

если у тебя 
Цитата(Alek86 @  15.5.2008,  10:09 Найти цитируемый пост)
жаль, что читающий такой код
Код

bool b = true;
//...
b ^= 1;

так наверно будет симпатичней :
Код

b^=true;


P.S.
Цитата(Alek86 @  15.5.2008,  10:09 Найти цитируемый пост)
про ссылки и доп. функции смотрите первый пост

про ссылки прочитал, а вот про функции упустил - сбило std::negate - она же функция 
плюс к тому же ИМХО любой код несуший самостоятельную логику должен быть разгружен (посредством функции)


Это сообщение отредактировал(а) mes - 19.5.2008, 01:00


--------------------
PM MAIL WWW   Вверх
MAKCim
Дата 15.5.2008, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(Alek86 @  15.5.2008,  10:09 Найти цитируемый пост)
будет долго вдуплять, что сие значит

значит он неправильно профессию выбрал  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Alek86
Дата 15.5.2008, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(MAKCim @  15.5.2008,  10:34 Найти цитируемый пост)
значит он неправильно профессию выбрал 

перефразирую
читаться такой текст будет намного хуже, чем
Код
bool b = true;
//...
negate(b);



Цитата(mes @  15.5.2008,  10:30 Найти цитируемый пост)

так наверно будет симпатичней:
Код
b^=true;

да, это и правда получше smile



--------------------
user posted image    user posted image
PM MAIL   Вверх
archimed7592
Дата 16.5.2008, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(MAKCim @  15.5.2008,  10:34 Найти цитируемый пост)
значит он неправильно профессию выбрал  smile  

Всё он правильно выбрал smile. Мы не криптографы и не криптоаналитики и в чужих кодировках мыслей по хорошему разбираться не обязаны(но приходится smile).

Цитата(Alek86 @  15.5.2008,  10:47 Найти цитируемый пост)
читаться такой текст будет намного хуже, чем

Такой текст тоже очень плох. Ф-ция на то и ф-ция, чтобы что-то брать на вход и что-то выдавать на выход, а не модифицировать свои входные данные. Есть конечно случаи когда это целесообразно(и примеров этому куча), но, не думаю, что в данном случае.

Цитата(JackYF @  14.5.2008,  14:47 Найти цитируемый пост)
Это так, для развития - "^= 1" лучше в данном случае. 

Чем, блин? smile
Самый лучший и понятный вариант - это с ссылкой. Он
1. понятен.
2. не уступит в производительности варианту с ^=(особенно в случае с preferences - не думаю, что кто-то станет редактировать preferences миллионы раз в секунду).
3. на случай опасности случайно изменить значение по ссылке ей можно дать ограниченную область видимости

Ребят, пишите так чтобы потом (хотя бы) самим понятно было... Я с месяца полтора назад на скорую руку наклепал одну программу. Точнее говоря на скорую руку наклепал я одну её часть. Пару дней назад мне пришлось добавлять ф-ционал как раз в эту часть. И, несмотря на то, что у меня там не было таких вещей как ^= и им подобных, я половину рабочего дня(!!) сидел и пытался одуплить
1. как эти 30 строк вообще работают
2. каков необходимый результат(от этих строк)
3. как переделать так чтобы помимо добавления ф-ционала результат остался тем же


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Alek86
Дата 16.5.2008, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(archimed7592 @  16.5.2008,  10:58 Найти цитируемый пост)
Такой текст тоже очень плох. Ф-ция на то и ф-ция, чтобы что-то брать на вход и что-то выдавать на выход, а не модифицировать свои входные данные. Есть конечно случаи когда это целесообразно(и примеров этому куча), но, не думаю, что в данном случае.

С этим не могу согласиться. Имхо, дело привычки.

к тому же если функция названа negate, лично я ее перевожу как "поменять значение на противоположное" а не "вернуть противоположное"


--------------------
user posted image    user posted image
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0801 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.