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

 

これはどういうことでしょうか?

2018.04.24 14:02:21.721 Books   invalid book item[Si-6.18,buy,61996.00000,-50]
 
fxsaber:
スクリプトが何も出力されないのはなぜですか?
ポインタの転送であり、値の転送ではないため
 
Комбинатор:
値でなく参照であるため

まったく理解できない。以下はそのコードです。

class A
{
public:
  template <typename T>
  void operator =( T& ) // Без ссылки работает
  {
    Print(__FUNCSIG__);
  }
  
  void operator =( int )
  {
    Print(__FUNCSIG__);
  }
};

void f( A*& )
{
  Print(__FUNCSIG__);
}

void OnStart()
{
  A* a = new A;  
  
  A b;  
  b = a; // cannot convert type ' *' to reference of type 'A *'
  
  a = a;
  a = 1;
  
  f(a);
  
  delete a;
}

ポインタを参照渡しするとなぜか文句を言われる。同時に、f関数は冷静にポインタを参照で受け取っている。


その結果

void A::operator=<A*>(A*)
void A::operator=(int)
void f(A*&)

int演算子は問題なく呼び出されましたが、ポインタ演算子はそうではありませんでした。

 
論理的には、参照なしでは動作しないはずです(imho)。これは、デリファレンスする必要がないという、mqlのポインタの特徴かもしれません。
 
Комбинатор:
論理的には、参照がなければ動作しないはずです(imho)。 mqlのポインタの特徴である、デリファレンスする必要がない、ということなのでしょう。

わかる人にはわかる、調べようというリクエスト。今はちょっと混乱してるんですよ。

以前は、演算子というのは、その構文からして便利なメソッドのひとつに過ぎないと思っていたのですが。また、それ以外の区別はありません。今、それは必ずしもそうではないことが判明しました。

 
fxsaber:

私はこれまで、演算子はあくまでも手法のひとつだと思っていました。

任意の演算子 はい、しかし

1.オペレーター=最も人気のある一人

2. コンパイラで生成される唯一の演算子

 
Комбинатор:

任意の演算子 はい、しかし

1.オペレーター=最も需要のある人の一人

2. コンパイラで生成される唯一の演算子

だから、オーバーロード/オーバーライドされた演算子。

 

間違ってました、リンクなしでも動くはずです。置換のニュアンスでリンクありでは動かないということですね。

プラスアルファで、リファレンスも使える。

そのような疑問がある場合は,ベンチマーク,つまりC++で確認するのがよいでしょう.ただし,構文が若干異なる場合があります.

operator_fxsaber, C++ (gcc) - rextester
  • rextester.com
operator_fxsaber in C++ (gcc)
 
Комбинатор:

間違ってました、リンクなしでも動くはずです。置換のニュアンスでリンクありでは動かないということです。

プラスで、リンクで機能する。

もしそのようなことに疑問を感じたら、ベンチマーク、つまりC++で確認するのがよいでしょう。構文は若干異なるかもしれませんが

ありがとうございました。残念ながら、私はMQL以外の言語を話すことができません。また、MQLに対する理解も浅い。MQLでOOPを勉強中です。

 

最初は算数なんて全然わからないと思っていました。


この2つの数字を足すと138.95になり、ゼロを2つ足すと-24.34になるのはどうしてでしょう?

でも、そこで気づいたんです。

昨日またはそれ以前に建てたポジションが今日決済された場合、それらは表示されませんが、決済されたポジションの金額の計算に参加します。

表示される履歴の深さを変更し、再度「今日」を選択すると、失われたポジションはすべて元の位置に戻ります。


このバグは修正されるのでしょうか?それとも誰も必要としていないのか?