错误、漏洞、问题 - 页 1087

 

当基类指针显式转换为派生类指针时,后缀运算符++的简略符号不能编译。

class A {
};

class B : public A {
public:
        void    operator++( int ) {}
        void    operator++()      {}
};

void f( A* a )
{
        ((B *)a).operator++( 0 ); //нормально
        ((B *)a).operator++();    //нормально
        ++((B *)a);               //нормально
        ((B *)a)++;               //ошибка
}
 
至少编译器 应该警告a.f()不是常量
class A {
public:
        int f() { return ( 1 ); }
};

class B {
public:
                B( const A *aa ) : a( aa ) {}
        int g() { return ( a.f() ); } //должно быть предупреждение, поскольку a.f() не const
        const A *a;
};
 
A100:
至少编译器 应该警告a.f()不是常量
谢谢你的勤奋,这两个错误都已经得到纠正。
 
mql5:
谢谢你的提醒,这两个错误都已改正。
只有最后一个在技术上不是一个错误--只应该是一个警告。只有在以下情况下才是一个错误
class B {
public:
        A * const a;
};

但在模板中。 我以后会给你举例。

 

这里也是--不清楚。

class A {
public:
};

void ex1( const A* &t1, const A* &t2 )
{
        const A* t = t1;
        t1 = t2;
        t2 = t;
}

void OnStart()
{
    const A *a1 = new A(), *a2 = new A();
    Print( "Было :" a1, " ", a2 ); // Было :1 2
    ex1( a1, a2 );
    Print( "Стало:"  a1, " ", a2 ); // Стало:2 1
    delete( a1 );
    delete( a2 );
}

一切工作正常,但如果你加入中间函数ex2(...)

void ex2( const A* &t1, const A* &t2 ) { ex1( t1, t2 ); }

void OnStart()
{
    сonst A *a1 = new A(), *a2 = new A();
    Print( "Было: ", a1, " ",  a2 ); // Было :1 2
    ex2( a1, a2 );
    Print( "Стало:",  a1, " ",  a2 ); // Cтало:2 2           <-----
    delete( a1 ); delete( a2 );
}

其结果是不同的。ex2(...)做了什么?- 只是将指针通过引用传递到

请看一下

 
A100:

这里也是--不清楚。

一切工作正常,但如果你加入中间函数ex2(...)

其结果是不同的。ex2(...)做了什么?- 只是将指针通过引用传递到

请看一下

谢谢,语言优化器错误,已修复。
 

这不是第一次,但这是唯一一次在上传时得到这样的照片,这意味着你必须设置一些标准(你可能有某种尺寸)。
).其他地方都是正常显示。请告诉我什么是错的。


 
如果宏使用了一个结果类型转换,然后没有使用返回值(有时需要,有时不需要),就会发生不必要的编译错误
int g( int x ) { return ( x ); }

#define  F( X )    (long)g( X )

void OnStart()
{
        int f = F( 0 ); //нормально
        F( 0 );         //ошибка компиляции
}
 
A100:
如果一个宏使用了一个结果类型转换,而返回值随后没有被使用(有时需要,有时不需要),就会发生不必要的编译错误

这与使用辩护词没有关系。

一个简单的定义等价物也会产生同样的错误

(long)g(0);


'(long)' - expression has no effect


P.S. 现在这里会有一个Vorning。

 

重新编译指标后,在处理动态数 组时开始出现 "数组超出范围 "的错误。

这在以前没有发生过。该怎么做?

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5