Название: С++11 auto keyword Отправлено: Akon от Январь 02, 2015, 10:29 Насколько интенсивно вы используете auto при объявлении переменных. Я вот поначалу использовал довольно интенсивно, но сейчас прихожу к выводу, что код становится менее читаемым из-за явного отсутствия типа (особенно актуально на многомерных массивах/векторах - происходит "потеря размерности" при чтении кода, тогда как наличие перед глазами типа сразу освежает структуру многомерных массивов/векторов).
Название: Re: С++11 auto keyword Отправлено: Igors от Январь 02, 2015, 10:50 ... но сейчас прихожу к выводу, что код становится менее читаемым из-за явного отсутствия типа (особенно актуально на многомерных массивах/векторах - происходит "потеря размерности" при чтении кода, тогда как наличие перед глазами типа сразу освежает структуру многомерных массивов/векторов). Совершенно верно, злоупотреблять не надо. И не лучше ли сделать этот топик с голосованием?Название: Re: С++11 auto keyword Отправлено: xokc от Январь 02, 2015, 13:46 Использую auto только тогда, когда это очевидно (для итераторов, например), или когда имя класса/namespace очень уж длинное. Иначе, код, особенно чужой, гораздо труднее сопровождать. Да IDE от этих auto периодически с ума сходит и автокомплит работать перестаёт.
Название: Re: С++11 auto keyword Отправлено: CriDos от Январь 02, 2015, 18:32 Стараюсь использовать как можно реже.
Простые типы данных, не имеет смысла объявлять с auto, только путаницу получим. Сложные типы, желательно заранее именовать typedef'ом. В некоторых случаях, применяю для работы с итераторами, если среда позволяет. Всегда использую auto при создании лямбда-функций. Как только среда научится во всех случаях корректно работать с объектами через auto, тогда мб чаще буду применять :) Название: Re: С++11 auto keyword Отправлено: Авварон от Январь 02, 2015, 21:16 AAA - Almost Always Auto.
Даже для простых типов (если это не int) лучше юзать авто. Сегодня у вас написано float f = getFloat(); завтра вы переделываете метод в getDouble(), а f поправить забываете. Название: Re: С++11 auto keyword Отправлено: Akon от Январь 02, 2015, 21:26 В этом случае строгий компилятор выдаст ворнинг. А так спору нет, auto - это гибкость в ущерб наглядности и наоборот.
Название: Re: С++11 auto keyword Отправлено: Авварон от Январь 02, 2015, 23:45 В этом случае строгий компилятор выдаст ворнинг. А так спору нет, auto - это гибкость в ущерб наглядности и наоборот. Вот незадача Цитировать /usr/bin/clang++ -arch x86_64 -g -Wall -Wextra -pipe -fvisibility=default -x c++ -std=c++0x -stdlib=libc++ -fPIC -DQT_CORE_LIB -DQT_TESTLIB_LIB -I/Users/arch/Work/RTS/limon/share/include -I/Users/arch/Work/RTS/limon/include -I/Developer/Qt/5.3/clang_64/lib/QtCore.framework/Headers -I/Developer/Qt/5.3/clang_64/mkspecs/macx-clang -I/Users/arch/Work/RTS/build-limon-Desktop_Qt_5_3_clang_64bit-Отладка/qtc_Desktop_Qt_5_3_clang_64bit_qt_53_c-debug/optional.qtc_Desktop_Qt_5_3_clang_64bit_qt_53_c/GeneratedFiles -I/Developer/Qt/5.3/clang_64/lib/QtTest.framework/Headers -F/Developer/Qt/5.3/clang_64/lib -c /Users/arch/Work/RTS/limon/tests/auto/optional/tst_optional.cpp -o /Users/arch/Work/RTS/build-limon-Desktop_Qt_5_3_clang_64bit-Отладка/qtc_Desktop_Qt_5_3_clang_64bit_qt_53_c-debug/optional.qtc_Desktop_Qt_5_3_clang_64bit_qt_53_c/.obj/tst_optional.cpp.o -mmacosx-version-min=10.7 Прошу обратить внимание на -Wextra/Users/arch/Work/RTS/limon/tests/auto/optional/tst_optional.cpp:30:11: warning: unused variable 'f' [-Wunused-variable] float f = getDouble(); ^ 1 warning generated. Аналогично для сужения int64 -> int16 НИКАКИХ ворнингов. Ну или шланг говно:) Название: Re: С++11 auto keyword Отправлено: Igors от Январь 03, 2015, 08:37 AAA - Almost Always Auto. Не всегда (а то и редко) по вызову можно легко догадаться о типе возвращаемого значения. Даже для простых типов (если это не int) лучше юзать авто. Сегодня у вас написано float f = getFloat(); завтра вы переделываете метод в getDouble(), а f поправить забываете. Код И какой же тип имеет amount? Название: Re: С++11 auto keyword Отправлено: Akon от Январь 03, 2015, 09:26 Нет никаких незадач :) -Wall и -Wextra определяют лишь некоторые ворнинги, которые субъективно многими считаются наиболее востребованными и более-менее достаточными. -Wconversion, например, там не числится.
Пример к моему посту: Main.cpp: Код: int main(int argc, char *argv[]) g++ -c -Wconversion Main.cpp Код: Main.cpp: In function 'int main(int, char**)': Название: Re: С++11 auto keyword Отправлено: Авварон от Январь 03, 2015, 11:46 Уболтали) Энивей, никто не будет руками эти флаги прописывать (ну, кроме фанатов СMake'а), тем более под разные компиляторы.
Да даже если они и прописаны, ходить и вычищать эти ворнинги по коду хуже, чем не ходить и не вычищать. |