エラー、バグ、質問 - ページ 2327

 
Alexey Navoykov:

MQLはなぜ基底クラスが暗黙のうちに派生クラスにキャストされるバグを修正しないのですか?コンパイラの警告すら ないのですか?

それは、この正しい構成のためであるに違いない

class A {  };

class B : public A { };

A* a;

B* b= a;  // Нет ошибки

は考慮されていなかった。

 
fxsaber:

おそらく、この正しい設計のため

は、あなたのことを考慮に入れていません。

これは全く同じ間違った構造です。
 
Alexey Navoykov:
全く同じ間違った構造です。

ベースクラスへのポインタの後ろに派生クラスのオブジェクトがあれば、それは素晴らしい構造です。

 
fxsaber:

もし、ベースクラスへのポインタの後ろに派生クラスのオブジェクトがあれば、これは素晴らしいデザインです。

反論せず、これは間違いだと信じることをお勧めします。
 
Alexey Navoykov:
反論せず、間違いだと信じる ことをお勧めします。

この動詞は、技術的な場では応用力が弱い。C++を試してみた。

class A {  };

class B : public A { };

A* a = new B;

B* b= dynamic_cast<B*>(a); // cannot dynamic_cast ‘a’ (of type ‘class A*’) to type ‘class B*’ (source type is not polymorphic)
B* b1= a; // invalid conversion from ‘A*’ to ‘B*’ [-fpermissive]

どの選択肢もうまくいかなかった。その理由は明確ではない。

 
Koldun Zloy:

互換性を持たせてしまうと、どちらも不要になるだけです。

C++では、これが可能です。

私は、明日(10年後ではなく)実装可能で、C++の外形に似ている、最も単純な変形を提案しました(そうでなければ、なぜ何も変えないのでしょう)。しかも、operator*()が実装されておらず、今後も実装されないのであれば(フォーラムに情報がありました)、なぜいきなりoperator->()が実装されるのか不明です(両者は同じ順番です)。

 
Alexey Navoykov:

MQLはなぜ基底クラスが暗黙のうちに派生クラスにキャストされるバグを修正しないのですか?コンパイラの警告すら ないのですか?

コンパイルエラーを待っているのでしょうか? そんなことはないはずです。この場合は dynamic_cast ですから。
 
TheXpert:
コンパイルエラーを待っているのでしょうか? そんなことはないはずです。この場合は dynamic_cast ですから。
上記参照、fxsaberはC++のコードを提供しました。
 
Alexey Navoykov:
上記参照、fxsaberはC++のコードを提供しました。

によって編集されています。

class A 
{ 
public:
    virtual ~A() = default; 
};

class B : public A { };

int main(void)
{
    A* a = new B;
    B* b= dynamic_cast<B*>(a);
    return 0;
}
 
TheXpert:

によって編集されています。

注意力がないんですね。