错误、漏洞、问题 - 页 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运算符的调用没有任何问题,而指针运算符却没有问题。

 
从逻辑上讲,没有引用也不应该工作(我认为)。这可能是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。

 

起初我以为我根本不懂算术。


这两个数字加起来怎么会是138.95,加两个零怎么会是-24.34?

但后来我意识到。

如果昨天或更早开立的头寸在今天被关闭,它们不会被显示出来,但它们会参与平仓金额的计算。

如果你改变所显示的历史深度,然后再次选择 "今天",所有丢失的头寸将回到原位。


这个错误会被修复吗?还是没有人需要它?