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

 
TheXpert:
今は概念もなく、オブジェクトとそれへのポインタが一山に混在しています。

これにより、ポインタをオブジェクトとして扱えるようになり、場合によっては * を付けずに記述することが容易になります。

であり、そのようなポインタは参照として使用することもできます。

そして今、彼らはすべてを破壊し、何のために石器時代に戻ろうと提案しているのか、誰も知らない。

 
A100:

そして今、彼らはそれをすべて破壊し、何のために石器時代に戻ろうと提案しているのかわからない。

まあ、それはあなたの意見ですが、私は正反対に考えています。

 
TheXpert:

それはあなたの意見で、私は正反対の考えです。

具体的にどのような点が気に入らないのでしょうか?MQLのポインターが実は参照であること?そして、MQLのアドレス演算は意味がない、だから使わない!
 

A100:
А что конкретно Вас не устраивает? Что в MQL указатель это фактически ссылка?

それはない)

MQLではアドレス演算は無意味であり、したがって使用されないのに!?

スマートポインタもアドレス演算を持たないが、何らかの理由で使用されている
 
TheXpert:

実はそうではない )

スマートポインタもアドレス演算を持たないが、何らかの理由で使用されている

厳密には違いますが、アドレス演算がない場合、MQLポインタライタはC++ポインタよりもC++参照に近い(少なくとも遠くには行かない)です。

そして、もしそうなら、構文はそれに応じて保存されなければなりません(*なし)。

 
Ilyas:

いや、深刻な理由はなかった。

それがない正当な理由は、C++に不慣れなユーザーの壊れやすい心をケアするためだけです。

 
A100:

厳密に言えばそうではないが、アドレス演算がない場合、ポインタ/MQLポインタはC++ポインタよりもC++参照に近い(少なくともそれ以上遠くない)ことになる

そして、もしそうなら、構文はそれに応じて(*なしで)保存されるべきです。


 
A100:

なぜこんなに複雑にするのか?.と->を等価な、交換可能なレコードにすることで十分である。

比喩的に言えば

互換性を持たせれば、単に両方が必要ないだけです。

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

class A
{

public:
   void f();
};

class PtrA
{
  A* mPtr;

public
   PtrA( A* a ) : mPtr( a ){}

   A* operator->()
   {
      return mPtr;
   }

   void f();
};

PtrA a( new A );

a.f();   //  Это две разные функции
a->f();  //
 

演算子->は、第一にC++のコードとの互換性のため、第二にオーバーロードを可能にするため(スマートポインタに有効)、本当は言語に追加されるべきものです。

ドットはMQLでは普遍的な演算子です。

 

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

class A {  };

class B : public A { };

A a;

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