Безопасно ли преобразовывать C++ bool в Windows API BOOL с помощью этой конструкции?
bool mybool = true;
BOOL apiboolean = mybool ? TRUE : FALSE;
Я предполагаю, что это да, потому что я не вижу никаких очевидных проблем, но я хотел воспользоваться моментом, чтобы спросить, только потому, что это может быть более тонким, чем кажется.
Спасибо Диме за (мягко) указание на мою невнимательность в том виде, в котором я изначально сформулировал вопрос.





Ты имеешь ввиду
bool b;
...
BOOL apiboolean = b ? TRUE : FALSE;
Если так, то да, это сработает.
Да, это сработает, но
bool b;
...
BOOL apiboolean = (BOOL) b;
должен работать так же хорошо, как и обратное:
bool bb = (bool) apiboolean;
В этом случае вы должны использовать static_cast <BOOL> (b).
на самом деле вы должны просто позволить ему неявно использовать для вас. Компилятор знает, как выполнять приведение между int и bool, а BOOL обычно является typedef для некоторого типа int.
Грег, bool to int, вероятно, сработает, но Visual Studio выдаст предупреждение, если вы попытаетесь преобразовать int в bool.
Привет, ребята, да, я рассмотрел все эти способы кастинга - я только спросил, как я сказал, потому что я подумал, что может быть какая-то тонкая проблема, которую я упустил. Я думаю, что предпочитаю подход Димы, потому что то, что я делаю, просто более очевидно (для тех, кто поддерживает этот код).
Я использую !! для int -> bool. Избегает предупреждения и меньше набирает, чем static_cast. Конечно, это выглядит немного глупо.
@Logan: я возражаю против использования! на int (в принципе). Кроме того, хотя он, вероятно, оптимизирован для чего-то разумного, «прямой» (неоптимизированный) перевод этого неадекватен.
Visual Studio 2005 просто примет:
bool b = true;
BOOL apiboolean = b;
литье не требуется.
Обратите внимание, что наоборот BOOL-> bool просто так не работает.
Ага. Простите - конечно вы правы. Спасибо. Я исправлю свой вопрос.