implementation defined. static_cast<int> ворнинг убирает. Почему? Ведь narrowing conversion никуда не пропал, просто делается теперь явно
Вы таким образом заявляете, что полную ответственность за корректность этого каста берёте на себя. Или нужно, чтобы этот варнинг был неотключаем?
Нет, ворнинг оставлять не нужно, просто хотелось понять, какая логика за этим стоит
Ну, логика именно в том, без явного каста можно было пропустить факт потери точности, не увидев его глазами, поэтому компилятор оказывал вам помощь. Тереть же это делается явно – не только все гарантии на себя взял программист, но и в случае чего, такие места легко видны невооружённым взглядом и без проблем ищутся поиском по тексту в кодовой базе
На самом деле возникает логическое противоречие - должен же существовать способ каста, не приводящий к warning'у, который выражал бы идею "я знаю, что делаю"
во-первых, какой тогда смысл будет в этой языковой конструкции вообще если она даже варнинг не убирает? во-вторых, у вас тогда вывод компилятора будет забит варнингами о том, что вы и так знаете, и вы замучаетесь там искать новую инфу
Насчет первого: это скорее, вопрос о implicit и explicit конверсии. Могут быть перегрузки одного метода, которые принимают как unsigned int, так и singed int. Если мы хотим явно вызвать перегрузку с signed int, то для этого и используем static_cast. Т.е. изначально суть статик_ каста же не в том, чтобы такие ворнинги убирать. Это лишь приятный бонус
Обсуждают сегодня