错误、漏洞、问题 - 页 2415

 

这种限制已经存在了很多年了。

这个问题有史以来第一次出现了

 
Stanislav Korotky:

这是某种严酷的限制。在今天的时代,其理由是什么?那么如何方便地指定一串字符的簇呢?要乘以一打不同的参数?这样方便吗?

其理由在与测试机构 的交流协议中。

要设置一堆字符,把这堆字符写到一个文本文件中,然后用#property tester_file传递给它。

 

但通过一次测试,它也会被传递给测试代理,并且不受限制地工作。

为什么对静态输入也有限制,它完全可以不传递给代理。

如果它甚至不是一个错误,就把它当作一个改进的要求。

 
Alexey Navoykov:

编译器错误,会产生歧义错误,尽管这里的一切都很明确。第一个方法应该被调用为最合适的 方法。在C++中测试。

如何定义最佳拟合方法?

 
Slava:

其理由在与测试机构 的交流协议中。

要指定一堆字符,把这堆字符写到一个文本文件中,然后用#property tester_file传递给它。

这与终端用户的产品有什么关系?这个限制以前可能是合理的,但我怀疑,基于其他的数据传输量。提高限额并没有带来不相容的威胁。

 
fxsaber:

如何确定它是合适的?

如果我们谈论的是C++标准,那么。

13.3 解决过载问题。 重载解析是一种机制,用于在给定的作为调用参数的表达式列表和基于调用上下文的可调用的候选函数集的情况下,选择要调用的最佳函数。最佳函数的选择标准是参数的数量,参数与候选函数的参数类型列表的匹配程度,(对于非静态成员函数)对象与隐含对象参数的匹配程度,以及候选函数的某些其他属性。[注意:通过重载解析选择的函数并不保证适合于上下文。其他的限制,如函数的可访问性,可以使其在调用上下文中的使用不符合规定。

也就是说,它应该像这样工作。

class A { };

class B
{
  A _a[];
 public:
        A * operator[](uint i)       { return &_a[i]; }
  const A * operator[](uint i) const { return &_a[i]; }  
};

void OnStart()
{
  B b1;
  const B b2;
  b1[0]; // []
  b2[0]; // [] const
}
 
Andrey Pogoreltsev:

如果我们谈论的是C++标准,那么。

13.3 解决过载问题。 重载解析是一种机制,用于在给定的作为调用参数的表达式列表和基于调用上下文的可调用的候选函数集的情况下,选择要调用的最佳函数。最佳函数的选择标准是参数的数量,参数与候选函数的参数类型列表的匹配程度,(对于非静态成员函数)对象与隐含对象参数的匹配程度,以及候选函数的某些其他属性。[注意:通过重载解析选择的函数并不保证适合于上下文。其他的限制,如函数的可访问性,可以使其在调用上下文中的使用不符合规定。

换句话说,它应该是这样工作的。

对于b2,完全不含糊。b1不是。

 
fxsaber:

如何确定合适的?

在这个例子中,一个非恒定对象方法被请求,所以,在其他条件相同的情况下,它应该被调用。

如果我们去掉铸造,为这两个方法做一个int类型的 参数,代码就可以正常编译了。 所以,MQL的问题是关于铸造的。 这个铸造一定不会影响代码,因为它是相同的。

 
fxsaber:

对于b2来说,是完全不含糊的。b1不是。

这里不需要明确的规定。它应该只是应用重载方法的顺序。也就是说,解决超载问题的任务不是制造困境,而是选择最合适的方法。抛开访问修饰符,它是表中的第一个方法,或者说它取决于编译器的实现,但并不存在歧义。

但如果有2个方法,例如有不同的输入参数。

class B
{
  A _a[];
 public:
        A * operator[](int i)  {...}
        A * operator[](bool i) {...}  
};
B b;
b[0];    // ok
b[true]; // ok
b[0 u];   // ambiguous call to overloaded function

回到C++,同一个向量有一个。

reference       operator[]( size_type pos );
const_reference operator[]( size_type pos ) const;

因此,这是一个非常正常的情况。

 
Stanislav Korotky:

这与终端用户的产品有什么关系?这个限制以前可能是合理的,但我怀疑,基于其他的数据传输量。提高限额并没有带来不相容的威胁。

首先,在优化缓存中,MT5和MT4的字符串参数一直被截断为63个字符。

在发送事件时,字符串也不能长于63个字符。

就是说,来自外部的东西是有限的

至于终端用户的产品。供应商必须考虑到这些限制。如果他不知道这些,那么他在销售产品之前就没有充分地测试他的产品。