Это не баг. Это именно так и реализовано с самого начала. А именно: "Обновление значения переменной, передаваемой по ссылке, происходит только после выхода из функции."
И это поведение не будет меняться.
Кстати проверил это утверждение и оно ошибочно - после выхода из функции обновления переменной не происходит и все расчеты становятся напрасными. На распечатке будет func1: x=1,func2: x=2,func1: x=1
int x=0;
int init()
{
func1(x);
}//---------void func1(int& x){
{
x = 1;
Alert("func1: x=",x);
func2();
Alert("func1: x=",x);
}
//---------void func2()
{
x = 2;
Alert("func2: x=",x);
}
Кстати проверил это утверждение и оно ошибочно - после выхода из функции обновления переменной не происходит и все расчеты становятся напрасными. На распечатке будет func1: x=1,func2: x=2,func1: x=1
Что это Вы представили в качестве примера?
В функции func2 переменная x глобальна (так как нет её ни среди локальных переменных, ни среди параметров)
В функции func1 переменная x локальна. По факту - это совершенно разные переменные.
То что Вы продемонстрировали, никак не противоречит моему утверждению: "переменная, переданная по ссылке, обновляется только после выхода из функции". Вы вызываете функцию func2, ещё не выйдя из функции func1.
В функции func1 переменная x локальна. По факту - это совершенно разные переменные.
Чтобы х была локальна внутри func1, нужно либо объявить внутри функции новую переменную х либо передать копию глобальной, но тогда это описывается func1(int x).
Если же она была бы локальна и была бы другой переменной, то она не должна была никак влиять на глобальную переменную х, которая изменяется внутри func1.
Andrei01:
вместо флуда лучше бы вы объяснили как это работает, если поняли, а то все объяснения пока что не подтвердились на практике.
Я думаю что так:
int gv = 0; // Глобальная переменная.void fn()
{
gv = 5; // Изменения по адресу gv произойдут немедленно.return;
}
int gv = 0; // Глобальная переменная.void fn(int &refToGv) // refToGv - ссылка на gv.
{
refToGv = 5; // Изменения немедленно, произойдут только по адресу refToGv (немного странно звучит, но ...).return; // А вот сейчас изменения произойдут по адресу gv.
}
int gv = 0; // Глобальная переменная.void fn(int &refToGv) // refToGv - ссылка на gv.
{
refToGv = 5;
interFn(); // После возврата из данной функции gv = 10, а refToGv по-прежнему = 5.
return;
}
void interFn()
{ // В данный момент gv = 0.
gv = 10;
return;
}
Купите "железное" феррари и катайтесь на нём вплоть до МТ8! :-)
Нет баблеца на мин требования по железу? - слушайте А.Герчика - он фигню не скажет: "Идите работать на стройку или таксистом. Позже приходите, как будете нам интересны."
Можно ли изменять настройки "стандартной" сетки в МТ4?
Например каждые 50 пипсов относительно круглых уровней и полностью отменить сетку по вертикали,
достаточно уже имеющихся разделителей периодов.
Если "нет" то сделайте это возможным в будущих версиях (можно и через ini файл).
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Это не баг. Это именно так и реализовано с самого начала. А именно: "Обновление значения переменной, передаваемой по ссылке, происходит только после выхода из функции."
И это поведение не будет меняться.
Кстати проверил это утверждение и оно ошибочно - после выхода из функции обновления переменной не происходит и все расчеты становятся напрасными. На распечатке будет func1: x=1,func2: x=2,func1: x=1
Кстати проверил это утверждение и оно ошибочно - после выхода из функции обновления переменной не происходит и все расчеты становятся напрасными. На распечатке будет func1: x=1,func2: x=2,func1: x=1
Что это Вы представили в качестве примера?
В функции func2 переменная x глобальна (так как нет её ни среди локальных переменных, ни среди параметров)
В функции func1 переменная x локальна. По факту - это совершенно разные переменные.
То что Вы продемонстрировали, никак не противоречит моему утверждению: "переменная, переданная по ссылке, обновляется только после выхода из функции". Вы вызываете функцию func2, ещё не выйдя из функции func1.
В функции func1 переменная x локальна. По факту - это совершенно разные переменные.
Чтобы х была локальна внутри func1, нужно либо объявить внутри функции новую переменную х либо передать копию глобальной, но тогда это описывается func1(int x).
Если же она была бы локальна и была бы другой переменной, то она не должна была никак влиять на глобальную переменную х, которая изменяется внутри func1.
хватит уже флудить, объяснили как работает, вот и используйте, не нравится - напишите свою версию mql41/2 и пользуйтесь ей..
вот еще баг компилятора с видимостью переменных. на распечатке будет func1:x=1, func2:x=0 хотя это та же самая переменная.
вместо флуда лучше бы вы объяснили как это работает, если поняли, а то все объяснения пока что не подтвердились на практике.
Я думаю что так:
Новая версия... Новая версия... = головная боль трейдерам.
На моём стареньком нетбуке последняя версия уже вопще не запускается даже.
Хотелось бы взглянуть на минимальные требования к железу.
Почему их не указывают, и при выпуске каждой следующей версии в том числе ?
Если новая версия челу уже не подходит по железу - у пользователя должен быть выбор, обновляться или продолжать
работу на той версии, что у него уже работает.
Ведь железо человек обновляет раз в год, а то и в пятилетку,
а вы шлёпаете обновления, как пирожки на привокзальной площади... - за вами попросту не угнаться.
И как я вижу по коментам пользователей - либо вовсе их не обкатываете, либо этот процесс выполняется весьма частичноусловно...
...
Купите "железное" феррари и катайтесь на нём вплоть до МТ8! :-)
Нет баблеца на мин требования по железу? - слушайте А.Герчика - он фигню не скажет: "Идите работать на стройку или таксистом. Позже приходите, как будете нам интересны."
Например каждые 50 пипсов относительно круглых уровней и полностью отменить сетку по вертикали,
достаточно уже имеющихся разделителей периодов.
Если "нет" то сделайте это возможным в будущих версиях (можно и через ini файл).