Ошибки, баги, вопросы - страница 1749
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Контроль скорее выборочный, а значит более противоречивый, что следует отсюда
class A {
}public:
void f( int ) const {} /*(1)*/
void f( int ) {} /*(2)*/
};
class B : public A {
public:
void f( int ) const {} /*(3)*/
};
void OnStart()
{
B b; //не const B
b.f( 0 ); //(*)
Но С++ всегда не анализирует базовый класс на более подходящий метод, если в производном есть просто подходящий.
А MQL - в предыдущем примере анализировал базовый класс на более подходящий метод, а в этом - не анализирует (здесь также как и С++ вызовет B::f/*(3)*/), а значит - нет единого подхода
Еще пример противоречивого контроля: C++ находит следующий код
void f( int i ) const {}
void f( uint i ) {}
};
void OnStart()
{
A a;
a.f((int)0 );
}
у вас компилятор под C++ какой? у меня gcc и все проходит без ошибок
void f( int i ) const {} //1
void f( unsigned int i ) {} //2
};
void OnStart()
{
A a;
a.f((int)0 );
}
(1) или (2). Сейчас вставлю сообщение компилятора
Вот это действительно - строгий контроль: один метод больше подходит по сигнатуре, другой - по константности
Вот это действительно - строгий контроль: один метод больше подходит по сигнатуре, другой - по константности
И не ясно, зачем такое писать.
Замените f -> operator[], возьмите свой недавний пример - подумайте как сделать [] и слева и справа. Добавьте константности по вкусу - далее заверните в шаблон и у Вас получится нечто похожее
Если сделать const - рассматривается вариант без если
Если однозначности быть не может, то следует выдать как минимум предупреждение
Замените f -> operator[], возьмите свой недавний пример - подумайте как сделать [] и слева и справа. Добавьте константности по вкусу - далее заверните в шаблон и у Вас получится нечто похожее
О каком примере речь? Могли бы Вы привести не исходник, а конечную запись, которая должна работать?
В итоге должно получиться что то вроде этого
{
A<int> a;
int b = a[ 0 ];
a[ 0 ] = a[ 1 ];
a[ 1 ] = b;
}
В итоге должно получиться что то вроде этого
{
A<int> a;
int b = a[ 0 ];
a[ 0 ] = a[ 1 ];
a[ 1 ] = b;
}
Индексы константные?
индексы числовые: 1 2 3 ... подразумевается что на месте A<int> может быть и const A<int>
индексы числовые: 1 2 3 ... подразумевается что на месте A<int> может быть и const A<int>
В этом случае a[ 0 ] = a[ 1 ]; должно выдавать ошибку?
В этом случае a[ 0 ] = a[ 1 ]; должно выдавать ошибку?
{
A<int> a;
const A<int> b;
a[ 0 ] = b[ 0 ]; //нормально
b[ 1 ] = a[ 2 ]; //ошибка
}