Сообщение Re[17]: Сишный каст - зло? от 29.07.2023 13:36
Изменено 29.07.2023 13:37 so5team
Re[17]: Сишный каст - зло?
Здравствуйте, Marty, Вы писали:
S>>1. У вас такой же список претензий/замечаний/вопросов/домыслов, как и у B0FEE664? Или же есть что добавить?
M>Я не вчитывался в смысл, потому что от одного оформления у меня кровь из глаз пошла
Экспертиза уровня Бох: что делается не знаю, как делается не вникал, увидел непривычное оформление и сразу вердикт "код ужасен".
Это, блин, какой-то детский сад, младшая ясельная группа.
S>>2. Если, по вашему мнению, код "максимально ужасен", то что могло бы его "исправить" (опять же по вашему мнению)?
M>Для начала — нормально оформить
Не постесняюсь спросить: а вы что, большую часть времени только с собственным кодом работаете? В чужой вообще не заглядываете?
Мне приходилось видеть и использовать разные стили оформления, так что на внешний вид, по большей части, пофиг, если только аффтары не злоупотребляют строками по 150+ символов длинной и функциями по 100+ строк.
S>>3. Могли бы вы, для симметрии, привести фрагмент своего кода с кастами, дабы проиллюстрировать как должен выглядеть нормально написанный вами код?
M>ЗЫ, хотя, вот, лови:
M>#include <iostream>
M>#include <iomanip>
M>#include <fstream>
...
M>#include <random>
Список инклюдов доставляет. Неприятный такой звоночек.
M>int main( int argc, char* argv[] )
M>{
M> UMBA_USED(argc);
M> UMBA_USED(argv);
Выглядит так, как будто вы 30 лет назад программировать учились. Я про UBMA_USED для аргументов функции, на которые забили.
M> if (w32.size()>10)
M> {
M> auto mid = w32.size()/2;
M> std::shuffle(w32.begin()+ (std::ptrdiff_t)1u, w32.begin()+(std::ptrdiff_t)mid, g);
M> std::shuffle(w32.begin()+(std::ptrdiff_t)mid, w32.end() -(std::ptrdiff_t)2u , g);
M> }
M> else
M> {
M> std::shuffle(w32.begin()+(std::ptrdiff_t)1, w32.end()-(std::ptrdiff_t)2, g);
M> }
Я, наверное, чего-то глобально не понимаю, но зачем это все?
Вот, по мотивам вашего кода минималистичный пример:
Компилируем:
Все. Никакого обилия кастов, не говоря уже про Си-шные касты.
Такое ощущение, что даже не дали себе труда подумать о том, что происходит. Вы явно используете литерал беззнакового типа, но вам-то нужен знаковый std::ptrdiff_t, поэтому вы недолго думая херачите Си-шный каст и угребищный получаете (std::ptrdiff_t)1u там, где достаточно всего лишь обычной единички.
S>>1. У вас такой же список претензий/замечаний/вопросов/домыслов, как и у B0FEE664? Или же есть что добавить?
M>Я не вчитывался в смысл, потому что от одного оформления у меня кровь из глаз пошла
Экспертиза уровня Бох: что делается не знаю, как делается не вникал, увидел непривычное оформление и сразу вердикт "код ужасен".
Это, блин, какой-то детский сад, младшая ясельная группа.
S>>2. Если, по вашему мнению, код "максимально ужасен", то что могло бы его "исправить" (опять же по вашему мнению)?
M>Для начала — нормально оформить
Не постесняюсь спросить: а вы что, большую часть времени только с собственным кодом работаете? В чужой вообще не заглядываете?
Мне приходилось видеть и использовать разные стили оформления, так что на внешний вид, по большей части, пофиг, если только аффтары не злоупотребляют строками по 150+ символов длинной и функциями по 100+ строк.
S>>3. Могли бы вы, для симметрии, привести фрагмент своего кода с кастами, дабы проиллюстрировать как должен выглядеть нормально написанный вами код?
M>ЗЫ, хотя, вот, лови:
M>#include <iostream>
M>#include <iomanip>
M>#include <fstream>
...
M>#include <random>
Список инклюдов доставляет. Неприятный такой звоночек.
M>int main( int argc, char* argv[] )
M>{
M> UMBA_USED(argc);
M> UMBA_USED(argv);
Выглядит так, как будто вы 30 лет назад программировать учились. Я про UBMA_USED для аргументов функции, на которые забили.
M> if (w32.size()>10)
M> {
M> auto mid = w32.size()/2;
M> std::shuffle(w32.begin()+ (std::ptrdiff_t)1u, w32.begin()+(std::ptrdiff_t)mid, g);
M> std::shuffle(w32.begin()+(std::ptrdiff_t)mid, w32.end() -(std::ptrdiff_t)2u , g);
M> }
M> else
M> {
M> std::shuffle(w32.begin()+(std::ptrdiff_t)1, w32.end()-(std::ptrdiff_t)2, g);
M> }
Я, наверное, чего-то глобально не понимаю, но зачем это все?
Вот, по мотивам вашего кода минималистичный пример:
#include <algorithm>
#include <string>
#include <vector>
#include <random>
int main()
{
std::mt19937 g{ std::random_device{}() };
std::vector< std::string > words;
for( auto & w : words )
{
auto w32 = w;
if( w32.size() > 10u )
{
const auto mid = static_cast<std::ptrdiff_t>( w32.size() / 2 );
std::shuffle( w32.begin() + 1, w32.begin() + mid, g );
std::shuffle( w32.begin() + mid, w32.end() - 2, g );
}
}
}
Компилируем:
tmp\rsdn_cpp_20230729>cl -EHsc -WX -Wall -std:c++17 t1.cpp
Microsoft (R) C/C++ Optimizing Compiler Version 19.36.32532 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
t1.cpp
Microsoft (R) Incremental Linker Version 14.36.32532.0
Copyright (C) Microsoft Corporation. All rights reserved.
/out:t1.exe
t1.obj
Все. Никакого обилия кастов, не говоря уже про Си-шные касты.
Такое ощущение, что даже не дали себе труда подумать о том, что происходит. Вы явно используете литерал беззнакового типа, но вам-то нужен знаковый std::ptrdiff_t, поэтому вы недолго думая херачите Си-шный каст и угребищный получаете (std::ptrdiff_t)1u там, где достаточно всего лишь обычной единички.
Re[17]: Сишный каст - зло?
Здравствуйте, Marty, Вы писали:
S>>1. У вас такой же список претензий/замечаний/вопросов/домыслов, как и у B0FEE664? Или же есть что добавить?
M>Я не вчитывался в смысл, потому что от одного оформления у меня кровь из глаз пошла
Экспертиза уровня Бох: что делается не знаю, как делается не вникал, увидел непривычное оформление и сразу вердикт "код ужасен".
Это, блин, какой-то детский сад, младшая ясельная группа.
S>>2. Если, по вашему мнению, код "максимально ужасен", то что могло бы его "исправить" (опять же по вашему мнению)?
M>Для начала — нормально оформить
Не постесняюсь спросить: а вы что, большую часть времени только с собственным кодом работаете? В чужой вообще не заглядываете?
Мне приходилось видеть и использовать разные стили оформления, так что на внешний вид, по большей части, пофиг, если только аффтары не злоупотребляют строками по 150+ символов длинной и функциями по 100+ строк.
S>>3. Могли бы вы, для симметрии, привести фрагмент своего кода с кастами, дабы проиллюстрировать как должен выглядеть нормально написанный вами код?
M>ЗЫ, хотя, вот, лови:
M>#include <iostream>
M>#include <iomanip>
M>#include <fstream>
...
M>#include <random>
Список инклюдов доставляет. Неприятный такой звоночек.
M>int main( int argc, char* argv[] )
M>{
M> UMBA_USED(argc);
M> UMBA_USED(argv);
Выглядит так, как будто вы 30 лет назад программировать учились. Я про UBMA_USED для аргументов функции, на которые забили.
M> if (w32.size()>10)
M> {
M> auto mid = w32.size()/2;
M> std::shuffle(w32.begin()+ (std::ptrdiff_t)1u, w32.begin()+(std::ptrdiff_t)mid, g);
M> std::shuffle(w32.begin()+(std::ptrdiff_t)mid, w32.end() -(std::ptrdiff_t)2u , g);
M> }
M> else
M> {
M> std::shuffle(w32.begin()+(std::ptrdiff_t)1, w32.end()-(std::ptrdiff_t)2, g);
M> }
Я, наверное, чего-то глобально не понимаю, но зачем это все?
Вот, по мотивам вашего кода минималистичный пример:
Компилируем:
Все. Никакого обилия кастов, не говоря уже про Си-шные касты.
Такое ощущение, что вы даже не дали себе труда подумать о том, что происходит. Вы явно используете литерал беззнакового типа, но вам-то нужен знаковый std::ptrdiff_t, поэтому вы недолго думая херачите Си-шный каст и получаете угребищный (std::ptrdiff_t)1u там, где достаточно всего лишь обычной единички.
S>>1. У вас такой же список претензий/замечаний/вопросов/домыслов, как и у B0FEE664? Или же есть что добавить?
M>Я не вчитывался в смысл, потому что от одного оформления у меня кровь из глаз пошла
Экспертиза уровня Бох: что делается не знаю, как делается не вникал, увидел непривычное оформление и сразу вердикт "код ужасен".
Это, блин, какой-то детский сад, младшая ясельная группа.
S>>2. Если, по вашему мнению, код "максимально ужасен", то что могло бы его "исправить" (опять же по вашему мнению)?
M>Для начала — нормально оформить
Не постесняюсь спросить: а вы что, большую часть времени только с собственным кодом работаете? В чужой вообще не заглядываете?
Мне приходилось видеть и использовать разные стили оформления, так что на внешний вид, по большей части, пофиг, если только аффтары не злоупотребляют строками по 150+ символов длинной и функциями по 100+ строк.
S>>3. Могли бы вы, для симметрии, привести фрагмент своего кода с кастами, дабы проиллюстрировать как должен выглядеть нормально написанный вами код?
M>ЗЫ, хотя, вот, лови:
M>#include <iostream>
M>#include <iomanip>
M>#include <fstream>
...
M>#include <random>
Список инклюдов доставляет. Неприятный такой звоночек.
M>int main( int argc, char* argv[] )
M>{
M> UMBA_USED(argc);
M> UMBA_USED(argv);
Выглядит так, как будто вы 30 лет назад программировать учились. Я про UBMA_USED для аргументов функции, на которые забили.
M> if (w32.size()>10)
M> {
M> auto mid = w32.size()/2;
M> std::shuffle(w32.begin()+ (std::ptrdiff_t)1u, w32.begin()+(std::ptrdiff_t)mid, g);
M> std::shuffle(w32.begin()+(std::ptrdiff_t)mid, w32.end() -(std::ptrdiff_t)2u , g);
M> }
M> else
M> {
M> std::shuffle(w32.begin()+(std::ptrdiff_t)1, w32.end()-(std::ptrdiff_t)2, g);
M> }
Я, наверное, чего-то глобально не понимаю, но зачем это все?
Вот, по мотивам вашего кода минималистичный пример:
#include <algorithm>
#include <string>
#include <vector>
#include <random>
int main()
{
std::mt19937 g{ std::random_device{}() };
std::vector< std::string > words;
for( auto & w : words )
{
auto w32 = w;
if( w32.size() > 10u )
{
const auto mid = static_cast<std::ptrdiff_t>( w32.size() / 2 );
std::shuffle( w32.begin() + 1, w32.begin() + mid, g );
std::shuffle( w32.begin() + mid, w32.end() - 2, g );
}
}
}
Компилируем:
tmp\rsdn_cpp_20230729>cl -EHsc -WX -Wall -std:c++17 t1.cpp
Microsoft (R) C/C++ Optimizing Compiler Version 19.36.32532 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
t1.cpp
Microsoft (R) Incremental Linker Version 14.36.32532.0
Copyright (C) Microsoft Corporation. All rights reserved.
/out:t1.exe
t1.obj
Все. Никакого обилия кастов, не говоря уже про Си-шные касты.
Такое ощущение, что вы даже не дали себе труда подумать о том, что происходит. Вы явно используете литерал беззнакового типа, но вам-то нужен знаковый std::ptrdiff_t, поэтому вы недолго думая херачите Си-шный каст и получаете угребищный (std::ptrdiff_t)1u там, где достаточно всего лишь обычной единички.