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

Поиск:

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


Эксперт
***


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

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



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

Код
g_preferences.m_visualisation.m_chapter_general.m_enable_show_filed_overlaps


есть ли в С++ стандартный способ поменять ее значение, не требующий писать вот ЭТО 2 раза?

типа функции std::negate (такой вроде нету), или вообще неизвестной мне конструкции языка

(про варианты типа создания временной переменной-ссылки и написания своей функции negate я знаю - интересно легчайшее СТАНДАРТНОЕ решение)


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


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 15
Всего: 124



g_preferences.m_visualisation.m_chapter_general.m_enable_show_filed_overlaps ^= 1;


Это сообщение отредактировал(а) SergeCpp - 14.5.2008, 14:38
PM MAIL WWW ICQ   Вверх
Alek86
Дата 14.5.2008, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(SergeCpp @  14.5.2008,  13:17 Найти цитируемый пост)
g_preferences.m_visualisation.m_chapter_general.m_enable_show_filed_overlaps ^= 1;


похоже на правду
и компилер (MSVC) даже ворнинги не дает

но все же спрошу - вы уверены, что это по стандарту и что для любого стандартного компилера
<false> ^= 1 будет давать true
и
<true> ^= 1 будет давать false
?

Это сообщение отредактировал(а) Alek86 - 14.5.2008, 13:25


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


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 15
Всего: 124



PM MAIL WWW ICQ   Вверх
vinter
Дата 14.5.2008, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(Alek86 @  14.5.2008,  14:22 Найти цитируемый пост)
но все же спрошу - вы уверены, что это по стандарту и что для любого стандартного компилера<false> ^= 1 будет давать trueи<true> ^= 1 будет давать false?

а при чем тут компилятор? это битовая логика.


--------------------
Мой блог
PM MAIL WWW   Вверх
SergeCpp
Дата 14.5.2008, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 15
Всего: 124



user posted image


Это сообщение отредактировал(а) SergeCpp - 14.5.2008, 13:50
PM MAIL WWW ICQ   Вверх
vinter
Дата 14.5.2008, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



а вообще std::logical_not<type>(param)


--------------------
Мой блог
PM MAIL WWW   Вверх
JackYF
Дата 14.5.2008, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



А есть ещё ссылки:

Код

bool& param = g_preferences.m_visualisation.m_chapter_general.m_enable_show_filed_overlaps;
param = !param;


Это так, для развития - "^= 1" лучше в данном случае.


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


Hacker
****


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

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



Цитата(Alek86 @  14.5.2008,  13:08 Найти цитируемый пост)
про варианты типа создания временной переменной-ссылки


Цитата(JackYF @  14.5.2008,  14:47 Найти цитируемый пост)
А есть ещё ссылки:


Не любит автор ссылки с указателями smile


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Alek86
Дата 14.5.2008, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(SABROG @  14.5.2008,  15:38 Найти цитируемый пост)
Не любит автор ссылки с указателями

кто тебе сказал эту ересь? smile
обожаю

просто, я добивался именно элементарной операции отрицания
жаль, что ее запись неочевидна


Цитата(vinter @  14.5.2008,  13:54 Найти цитируемый пост)
а вообще std::logical_not<type>(param)

этот (цитата со стандарта)
Цитата
template <class T> struct logical_not : unary_function<T,bool> {
bool operator()(const T& x) const;
};
4 operator() returns !x.

и чем же он тут поможет? smile


Цитата(SergeCpp @  14.5.2008,  13:42 Найти цитируемый пост)
true

false

а на стандарт ссылку можно?
я нашель только
Цитата
A zero value, null pointer value, or null member pointer value is converted to false any other value is converted to true.

но, вроде твой способ этому не противоречит
+

Добавлено через 11 минут и 11 секунд
хотя нет, противоречит
если в true вместо единицы будет двойка, то ^=1 не поможет

Это сообщение отредактировал(а) Alek86 - 14.5.2008, 16:38


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


Hacker
****


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

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



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


Код

    bool tst = 2; //true
    tst ^= 1; // false
    tst ^= 1; //true



--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Alek86
Дата 14.5.2008, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



SABROG, если тема перешла на сцылки со Стандарта, то примеры кода уже не помогут
сцылки нужно только сцылками крыть smile


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


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(Alek86 @  14.5.2008,  18:18 Найти цитируемый пост)
SABROG, если тема перешла на сцылки со Стандарта, то примеры кода уже не помогут

lда то ты к стандарту то пристал? причем стандарт к стандартным оперциям с битами?
Цитата(Alek86 @  14.5.2008,  17:35 Найти цитируемый пост)
и чем же он тут поможет? 

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

конечно не поможет smile
можно так:
Код

g_preferences.m_visualisation.m_chapter_general.m_enable_show_filed_overlaps ^= 1;
g_preferences.m_visualisation.m_chapter_general.m_enable_show_filed_overlaps &= 1;



--------------------
Мой блог
PM MAIL WWW   Вверх
baldina
Дата 14.5.2008, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



ну это если четное. а для любого числа - что-нить типа
Код

((g_preferences.m_visualisation.m_chapter_general.m_enable_show_filed_overlaps -= 1) &= 0x70000000) >>= 30;


Добавлено через 1 минуту и 52 секунды
хотя такому "стандартному" я бы предпочел нестандартое попроще  smile 
PM MAIL   Вверх
Rififi
Дата 14.5.2008, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 11
Всего: 36



Код
enum Bool
{ Invert };

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

bool b = true;
b << Invert;

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.0988 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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