Причина не в этом, т.к. сделали только для ограниченного числа операторов. Хотелось бы узнать причины.
Ведь явно проходила дискуссия и выносилось решение.
Насколько я могу судить - сделали не специально, а как следствие. В отношении ограниченного числа операторов ранее были допущены вольности (неоднозначности) - частично их убрали - только и всего. А со стороны кажется - будто новые правила появились, а это просто действует формальный подход
itself #import is not an obstacle to calling a function, otherwise .dlls without const would not work either - but they do:
but we're talking about something else:
На самом деле, "const" - это конструкция компилятора. Он не входит в двоичный код. Экспортируемые функции DLL не имеют "const". ex5 является пропиатарным, поэтому в объявлении импорта может храниться "const".
На самом деле, "const" - это конструкция компилятора. Он не входит в двоичный код. Экспортируемые функции DLL не имеют "const". ex5 является пропиатарным, поэтому в объявлении импорта может храниться "const".
Вопрос в том, почему f1() вызывается без ошибки? Он тоже объявлен как const
void f1( conststring = "1" );
Изначально имеем два варианта одного и того же (!) кода. В (1) случае - единым .mq5 файлом, во (2) случае - через #import
А результат - разный! Что Вы можете сказать по сути изложенного: Код - не одинаков? Тогда в чем принципиальное отличие!? Код некорректный? Тогда почему компилятор не сообщил об этом?
struct A { int a; };
struct B : A {
B() {}
B( const B& b ) : A(b) { Print(__FUNCSIG__); } // Почему это компилируется?
};
voidOnStart()
{
B b1; b1.a = 1;
B b2 = b1; // Почему здесь вызывается B( const B& b ) ?Print( b2.a );
}
Компилятор build 4158 - никакой ошибки при компиляции - нет - только при выполнении
Я ошибся - неправильно трактовал сообщение без запуска.
А причина простая - чтобы все компиляторы в будущем работали одинаково (убрали неоднозначность), а не кто как захочет
Причина не в этом, т.к. сделали только для ограниченного числа операторов. Хотелось бы узнать причины.
Ведь явно проходила дискуссия и выносилось решение.
Причина не в этом, т.к. сделали только для ограниченного числа операторов. Хотелось бы узнать причины.
Ведь явно проходила дискуссия и выносилось решение.
Насколько я могу судить - сделали не специально, а как следствие. В отношении ограниченного числа операторов ранее были допущены вольности (неоднозначности) - частично их убрали - только и всего. А со стороны кажется - будто новые правила появились, а это просто действует формальный подход
fxsaber #:
где можно почитать о причинах такого изменения языка в C++17?
В комментариях к стандарту C++17. "Я открыл Вам бесплатный доступ в поиск Google"(ц)
В комментариях к стандарту C++17. "Я открыл Вам бесплатный доступ в поиск Google"(ц)
Если уже видели - дайте знать ссылкой.
itself #import is not an obstacle to calling a function, otherwise .dlls without const would not work either - but they do:
but we're talking about something else:
На самом деле, "const" - это конструкция компилятора. Он не входит в двоичный код. Экспортируемые функции DLL не имеют "const". ex5 является пропиатарным, поэтому в объявлении импорта может храниться "const".
На самом деле, "const" - это конструкция компилятора. Он не входит в двоичный код. Экспортируемые функции DLL не имеют "const". ex5 является пропиатарным, поэтому в объявлении импорта может храниться "const".
Вопрос в том, почему f1() вызывается без ошибки? Он тоже объявлен как const
Изначально имеем два варианта одного и того же (!) кода. В (1) случае - единым .mq5 файлом, во (2) случае - через #import
А результат - разный! Что Вы можете сказать по сути изложенного: Код - не одинаков? Тогда в чем принципиальное отличие!? Код некорректный? Тогда почему компилятор не сообщил об этом?
Результат: 0
Ожидалось: 1
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
A100, 2024.02.02 08:08
Возникли вопросы.
Возникли вопросы.
Как видите ошибок при компиляции нет - значит все нормально