上篇,大白介绍了MQL5中没有运算地址,也无法使用goto语句,本文,我们将继续介绍MQL5和C++的两个不同,分别是:MQL5中的匿名计算无法被删除以及MQL5中无成倍继承。
"匿名计算无法被删除":一旦进行了匿名计算并生成了结果,就无法将其完全从系统中删除。。
在MQL5中,匿名计算指的是通过使用函数指针或者函数对象,可以在不定义实际函数的情况下直接传递并执行一段代码。匿名计算是一种方便的编程技术,它可以提高代码的可读性和灵活性。
然而,一旦将匿名计算传递给某个函数或变量后,它就无法完全删除。具体而言,无法删除匿名计算的内存分配空间,因为MQL5并没有提供与C++中的delete运算符等效的方法来释放匿名计算的内存空间。
这与C++的lambda表达式有所不同。在C++中,lambda表达式可以在创建之后显式删除,因为C++提供了delete运算符来释放内存空间。
因此,在MQL5中,使用匿名计算时需要谨慎,尽可能避免在程序运行期间创建大量的匿名计算,以减少内存占用和程序性能问题。
大白点睛:匿名计算其实是无法完全删除。
在面向对象编程中,继承是一种非常重要的概念。它允许新的类(子类)继承现有类(父类)的属性和方法,从而实现代码复用和扩展性。
在C++中,支持多继承(multiple inheritance),即一个子类可以继承多个父类的属性和方法。这种方式可以实现更灵活的代码设计,但也存在潜在的问题,例如由于继承了多个父类,可能会出现命名冲突、方法重复实现等问题。因此,在C++中需要使用虚拟继承(virtual inheritance)来解决这些问题。
而在MQL5中,由于其面向对象特性的限制,不支持多继承。即一个子类只能继承一个父类的属性和方法,无法实现无成倍继承。这种限制是由于MQL5主要是为了编写金融交易算法而设计的,因此采用了相对较为简单的面向对象设计。
下面是一个示例,演示了在C++中使用多继承和虚拟继承时的不同表现:
在这个示例中,类A和B都有一个同名的方法say_hello()。当使用多继承的方式时,如果一个子类继承了两个父类,且这两个父类都有一个同名的方法,则可能会出现方法被覆盖的问题。而当使用虚拟继承时,可以解决这个问题,从而避免了潜在的错误。在MQL5中,由于不支持多继承,无法实现上述示例中的C类。
大白点睛:mql5一个子类只能继承一个父类。