- 1
- 2
auto highPriority = static_cast<bool>(features(w)[5]);
// Тип features(w) - std::vector<bool>
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+4
auto highPriority = static_cast<bool>(features(w)[5]);
// Тип features(w) - std::vector<bool>
Скотт Майерс. Эффективный и современный С++.
питон
Только перегрузка этого оператора - отличный шанс походить по граблям с приоритетами и неоднозначностями...
народ пишет что ambiguous/зависит от конпелятора/зависит от констности/зависит от типов и от хез какой еще лабуды. вообщем: как обычно, в крестах.
http://stackoverflow.com/questions/1384007/conversion-constructor-vs-conversion-operator-precedence
http://stackoverflow.com/questions/1051379/is-there-a-difference-in-c-between-copy-initialization-and-direct-initializati/
Национальный спорт крестовиков.
жаба это однозначно футбол (25 мужиков долго бегают за одним мячом, "но с ооочень глууубокой стратегией", результат 1:0, и все в восторге!)
перл это регби/американский футбол - there can never be enough brute force.
питон это бейсбол: бегание по кругу + long shot.
Ruby - настольный пеннис
Assembler - Шахбокс
Поэтому проще задать список имплисит преобразований вручную. А еще лучше пользоваться этой фичей только для врапперов и делать максимум одну-две версии перегрузки (const/non-const)
scott meyers effective modern c++. item 6 p. 43.
А с явным static_castom всё правильно выводится
bool highPriority = features(w)[5];
Вот не понимаю я таких кадров. Ладно бы ещё там был какой-нибудь std::map<std::string, std::vector<std::pair<bool, std::queue<std::string>>>>, а то ведь 4 буквы написать лень! И то, auto и static_cast - не лень.
Вот в выражении типа MyClass *ptr = dynamic_cast<MyClass>(expr()); по факту лучше использовать auto, т.к. иначе идет дублирование. Но это же явное преобразование.
Но ведь это и есть bool.
>>> Тип features(w) - std::vector<bool>
features(w)[5] вернёт прокси-объект, который содержит ссылку на бит в векторе и неявно конвертируется в бул. Из-за такой хуйни использовать его с авто опасно. И не счесть людей, которые сделали const bool& foo = ... и удивлялись, почему код не работает.