错误、漏洞、问题 - 页 1736

 
coderex:

如果有人感兴趣,servicedesk的回答。

На данный момент оператор *(dereference/indirection) можно использовать только для указателей на объекты классов и это rvalue

我非常感兴趣!请用一个例子解释服务台的答案

& == GetPointer().* - 没有任何变化。

 
fxsaber:

我非常感兴趣!请用一个例子解释服务台的答案

& == GetPointer().* - 没有任何变化。

你需要什么例子?
 
coderex:

如果有人感兴趣,答案是servicedesk。

На данный момент оператор *(dereference/indirection) можно использовать только для указателей на объекты классов и это rvalue
前几天我给他们发了一个建议,关于为任何数据类型 引入指针。而这种荒谬的限制是令人讨厌的。
 
Alexey Navoykov:
顺便说一下,我前几天给他们发了一份关于引入指针到任何数据类型 的提案。而这种可笑的限制已经让人厌烦。
最好能引入*操作符的重载,因为没有它,我们就无法实现与STL的同一性,也最好能完全引入类型化,而不仅仅是在calback`i上。
 
coderex:
最好能引入*操作符的重载,因为没有它我们就无法实现与STL的同一性,同时最好能完全引入类型化,而不仅仅是在calback`i上。
是的,我同意。一切都处于某种未完成的状态。而在过载方面,我对幽灵操作者更感兴趣,没有它就很难做到。
 
coderex:
你想要什么样的例子?
你想从*和&中得到什么。简单但能说明问题的东西。因此,你可以看到这种便利。
 
fxsaber:
你想从*和&中得到什么。简单但能说明问题的东西。要看方便。

我想要的东西我已经写在上面了。

你可以用'&'运算符自己编一个例子,在那里你使用GetPointer(...),它基本上是一个简短的形式

有'*'运算符的例子--我不知道它是否有助于你的理解。

class Iterator
  {
   int m_value;
public:
   Iterator(const int val) : m_value(val) { }
   int operator*() { return m_value; }
  };

int main(int argc, char **argv) {
   Iterator *_it = new Iterator(5);
  
   int _val = **_it;
//---
   return 0;
}


这在C++中是可行的,但在MQL中你必须做一个获取器来获取m_value。

 

添加到帮助中,ChartRedraw(MainChartID)不适合用于重绘OBJ_CHART。ChartRedraw(ObjChartID)是必需的。

因此,帮助中的例子是不正确的。

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_CHART
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_CHART
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_CHART - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

请不要将比例限制在N<=5(条形下的面积大小=2^N)。

这是必要的(而且已经成为权宜之计),以便能够更详细地查看勾股历史

 
请澄清一下。脚本
class A
{
public:
  const int a;
  
  A( int c = 0 ) : a(c) {}
  
  virtual int f()
  {
    Print(__FUNCTION__);
    
    return(this.a);
  }
};

class B : public A
{
public:
  const int b;
  
  B( int c = 0 ) : A(c), b(this.f()){}

  virtual int f()
  {
    Print(__FUNCTION__);
    
    return(this.a);
  }
};


void OnStart()
{
  B b;  
  A* a = new B;
  
  delete a;
}

结果

2016.10.18 09:35:01.981 Test14 (GBPUSD,M1)      B::f
2016.10.18 09:35:01.981 Test14 (GBPUSD,M1)      B::f

输出B::F而不是A::f的原因是什么?脚本的写法是,f在构造函数主体执行之前被调用(黑体)。但此时,A基类的构造函数 已经被调用。这就是为什么this.f()在调用B的构造函数之前似乎完全指的是基类。请解释推理/预测的错误在哪里。