Тут ни то что венгерская нотация, народу уже лень тип при объявлении писать, и современный с++ позволяет примерно так
auto fn() {
auto b = getValue();
for(auto & c : b) {
auto const & a = c.someCoeff();
a.test1();
a.test2();
if(auto ret = algorithm(a, obj1, obj2)) {
auto info = get();
...
}
}
returnvar;
}
Я не говорю, что это эталон, но тенденция очевидна - без адекватных инструментов при кодинге (запросить тип и т.д) будет туго. А если они есть, то не вижу смысла в плясках с вшивкой типа в имя.
По поводу венгерки. Сам её не использую, всё никак не могу заставить себя, однако считаю её очень полезной вещью, особенно в условиях MQL. Я бы даже сказал - именно в условиях MQL ) Потому как в C++ гораздо больше возможностей по управлению и контролю за типами. Во-первых - typedef. Во-вторых - decltype и auto. В третьих - возможность создания полноценных типов данных, с заданными операторами приведения, и могущих передаваться по значению. В MQL же всё очень урезано, поэтому венгерка по сути единственный надёжный вариант )
К слову, тут недавно была тема про путаницу между объектами и указателями при выполнении операторов в MQL. А вот если все указатели помечать по-старинке префиксом "p", тогда эта проблема станет неактуальна )
Я тем временем прошвырнулся по руководству gcc, доступны следующие варианты режимов сообщений о скрытии:
-Wshadow=global // аналог текущего
-Wshadow=local // локальная переменная скрывает другую локальную
// (случай из первого сообщения останется без ругательств)
-Wshadow=compatible-local // как предыдущий, но для ругательства тип переменных должен быть совместим
// (т.е. возможен каст из одного в другой).
Думаю, самый адекватный - третий, допустим второй, но первый - чересчур.
Предупреждение оставить, сторонникам отмены поотрубать руки, дабы неповадно было.
И ноги до самого подбородка.
Тут ни то что венгерская нотация, народу уже лень тип при объявлении писать, и современный с++ позволяет примерно так
auto fn() { auto b = getValue(); for(auto & c : b) { auto const & a = c.someCoeff(); a.test1(); a.test2(); if(auto ret = algorithm(a, obj1, obj2)) { auto info = get(); ... } } return var; }Я не говорю, что это эталон, но тенденция очевидна - без адекватных инструментов при кодинге (запросить тип и т.д) будет туго. А если они есть, то не вижу смысла в плясках с вшивкой типа в имя.
Вот тут также обсуждалось. https://www.mql5.com/ru/forum/149399/page26#comment_3751424
Предупреждение тут неграмотное по сути, так как речь идет о шаблоне функции, где можно использовать любые имена.
Сокрытие переменных по логике может происходить только при вызове функций, а не в их шаблонах.
Предупреждение оставить, сторонникам отмены поотрубать руки, дабы неповадно было.
По поводу венгерки. Сам её не использую, всё никак не могу заставить себя, однако считаю её очень полезной вещью, особенно в условиях MQL. Я бы даже сказал - именно в условиях MQL ) Потому как в C++ гораздо больше возможностей по управлению и контролю за типами. Во-первых - typedef. Во-вторых - decltype и auto. В третьих - возможность создания полноценных типов данных, с заданными операторами приведения, и могущих передаваться по значению. В MQL же всё очень урезано, поэтому венгерка по сути единственный надёжный вариант )
К слову, тут недавно была тема про путаницу между объектами и указателями при выполнении операторов в MQL. А вот если все указатели помечать по-старинке префиксом "p", тогда эта проблема станет неактуальна )
Ну с опросом всё ясно.
Я тем временем прошвырнулся по руководству gcc, доступны следующие варианты режимов сообщений о скрытии:
Думаю, самый адекватный - третий, допустим второй, но первый - чересчур.
Не ради спора, подвёл итог.
свое мнение не забыли озвучить, а упомянуть, что по умолчанию там global, почему-то забыли
Ну ладно вам, не придирайтесь :) Да дефолтно -Wshadow == -Wshadow=global