Ошибки, баги, вопросы - страница 3481

 
Dominik Egert #:

"const" !!!
    void f1(       string )        {}
    void f1( const string = "1" );

В f1 - тоже const нет (а все работает) - пример построен на противоречии: в одном случае все работает, а в другом подобном - нет

 
A100 #:

В f1 - тоже const нет (а все работает) - пример построен на противоречии

нет. импорт не работает. не соответствие сигнатуры функции.
 
Dominik Egert #:
нет. импорт не работает. не соответствие сигнатуры функции.

Сам по себе #import не является препятствием для вызова функции, иначе .dll без const тоже не работали бы - а они работают:

//Test2.cpp
    void f2(       string ) {}
//Test.mq5
#import "Test2.dll"
    void f2( const string = "2" );
#import
    void f1(       string ) {}
    void f1( const string = "1" );
void OnStart()
{
    f1(); //(1)//нормально
    f2(); //(2)//нормально
}

но речь о другом:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

A100, 2024.02.01 10:29

В f1 - тоже const нет (а все работает) - пример построен на противоречии: в одном случае все работает, а в другом подобном - нет

 
Alain Verleyen #:

И вы также можете прочитать текущий проект .

Разное поведение этих двух операторов сделано специально разработчиками C++?

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

A100, 2024.01.31 17:20

Т.е. в Microsoft дураки сидят ?!

#ifdef __cplusplus
class A {
public:
    A() {}
    A(const A&) {}
    void operator&&(const A&) { Print(3); }
    void operator&=(const A&) { Print(3); }
};
A f( int i ) { printf( "%d", i ); return A(); }
int main()
{                 //Результат:
    f(1) && f(2); //1-2-3
    f(1) &= f(2); //2-1-3
    return 0;
}
#endif

В одном случае 1-2-3, а в другом 2-1-3 сделали ?

Если да, то где можно почитать о причинах такого изменения языка в C++17?

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

A100, 2024.02.01 07:26

Ошибка при выполнении:
//Test2.mq5
#property library
    void f2(       string ) export {}
//Test.mq5
#import "Test2.ex5"
    void f2( const string = "2" );
#import
    void f1(       string )        {}
    void f1( const string = "1" );
void OnStart()
{
    f1(); //(1)//нормально
    f2(); //(2)//Error: cannot find 'f2' in 'Test2.ex5'
}

А какая принципиальная разница между (1) и (2) ?

Ошибка при компиляции.
 
fxsaber #:
Разное поведение этих двух операторов сделано специально разработчиками C++?

Если да, то где можно почитать о причинах такого изменения языка в C++17?

Там есть неточность - результат получен в C++20 Shell (в Online GDB аналогично)

и вначале добавить еще нужно:

#include <stdio.h>
#define Print(X)    printf("%d",X)

А причина простая - чтобы все компиляторы в будущем работали одинаково (убрали неоднозначность), а не кто как захочет

 
fxsaber #:
Ошибка при компиляции.

А где доказательство (скрин) ? Компилятор build 4158 - никакой ошибки при компиляции - нет - только при выполнении - в указанном месте

 
A100 #:

Компилятор build 4158 - никакой ошибки при компиляции - нет - только при выполнении

Я ошибся - неправильно трактовал сообщение без запуска.

 
A100 #:

А причина простая - чтобы все компиляторы в будущем работали одинаково (убрали неоднозначность), а не кто как захочет

Причина не в этом, т.к. сделали только для ограниченного числа операторов. Хотелось бы узнать причины.

Ведь явно проходила дискуссия и выносилось решение.

 
fxsaber #:

Причина не в этом, т.к. сделали только для ограниченного числа операторов. Хотелось бы узнать причины.

Ведь явно проходила дискуссия и выносилось решение.

Насколько я могу судить - сделали не специально, а как следствие. В отношении ограниченного числа операторов ранее были допущены вольности (неоднозначности) - частично их убрали - только и всего. А со стороны кажется - будто новые правила появились, а это просто действует формальный подход