错误、漏洞、问题 - 页 759

[删除]  
WWer:

所以应该是这样,复制构造函数的作用由重载赋值运算符来完成?

我不知道什么是正确的,但VS中的赋值运算符 不执行复制构造器的作用。
class tt
{
public:
        int f;
        tt(tt& u) {f = 1;}                // Копирующий конструктор, при выполнении его f == 1
        tt(){}
        void operator=(tt &u){f = 100;}   // При выполнении f == 100
};

tt fn()
{
        tt q3;
        return(q3);
}

int _tmain(int argc, _TCHAR* argv[])
{
        tt q2 = fn();
        std::cout<<q2.f;
        char input[54];
        std::cin>>input;
        return 0;
}

屏幕显示1,即复制构造函数被执行。

我认为是这样的。"2)用重载的赋值运算符 取消注释停止 "应该是没有用的。

 
220Volt:
我不知道什么是正确的,但VS中的赋值运算符 不执行复制构造器的作用。

屏幕显示1,即复制构造器正在运行。

我认为这一点。"2)用重载的赋值运算符 取消注释停止 "应该没有帮助。

复制构造函数在此执行

tt q2 = fn();
而不是在fn()函数内。
[删除]  
mql5:

拷贝构造函数在这里进行

而不是在fn()函数里面。

在这个变体中。

class tt
{
public:
        int f;
        tt(tt& u) {f = 1;}
        tt(){f = 198;}
        void operator=(tt &u){f = 100; std::cout<<"Выполнился присваивающий конструктор";}
};

tt fn()
{
        tt q3;
        return(q3);
}

int _tmain(int argc, _TCHAR* argv[])
{
        tt q2 = fn();
        std::cout<<q2.f;
        char input[54];
        std::cin>>input;
        return 0;
}
没有输出 "赋值构造器被执行 "一行。
[删除]  

就这样推导出来了。

tt q2;
q2 = fn();
WWer,如果通过与VS的类比,你需要看一下具体的情况,举一个具体的复制/分配的例子。将被执行的内容是当场决定的。
 
WWer:

为什么要进行初始化?它是一个类的实例,这个类有一个构造函数,就是为了这个目的。

是的,真的,对不起。


以及如何正确地写出一个用于此目的的复制构造函数?

你试图返回对象的函数getCopy()写得很正确。在重写赋值后,它已经返回一个指针,错误就会消失。

--

这里的混乱可能是由于该语言有一些 "语法反弹",与访问静态对象和动态对象的字段的相同语法表示有关(用一个点而不是一个箭头,顺便说一下,这真的很方便)。这是很常见的,而且会在一定程度上模糊了对象和对象指针之间的区别,这反过来又会导致一些错觉,比如一些东西可以被分配给静态(或自动)对象变量。远的不说,在赋值左边的对象变量总是一个指针。 如果没有定义复制构造函数.

 
不幸的是,这正是MQL5与C++不同的地方。

C++在fn()函数中构建了q2对象的返回,这就是为什么复制构造函数可以工作。

在MQL5中,对象是从外部构造的,所以有区别。让我们消除它们。


对于那些有兴趣的人来说:它被称为返回值优化

[删除]  

同事们,大家好

你能告诉我如何能同步 获得不同金融工具的价格值吗?我的意思是,例如,在过去的某个时间点,不同工具上的条形收盘价。使用CopyClose函数 并通过柱状体的索引 来获取数值并不是绝对正确的,因为对于不同的工具可能会有一些遗漏的柱状体。在我印象中,mql4有按时间划分的BarShift功能,mql5上是否有类似的功能?

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyClose
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyClose
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyClose - Документация по MQL5
 

如果你知道时间,你可以使用这个功能。

按开始日期和所需项目的数量进行处理

intCopyClose(
stringsymbol_name,//符号名称
ENUM_TIMEFRAMESTimeframe,// period
datetimestart_time,// from whichdate
intcount,//我们复制多少个
doubleclose_array[]// 用于复制收盘价的数组
)

[删除]  
Karlson:

如果你知道时间,你可以使用这个功能。

请参考开始日期和所需项目的数量

intCopyClose(
stringsymbol_name,// 符号名称
ENUM_TIMEFRAMEStimeframe,// period
datetimestart_time,//from what date
intcount,// 我们复制多少个
doubleclose_array[]// 用于复制收盘价的数组
);

假设,我想找到close[i]EUR/USD和close[i]GBP/USD的比率,但如果我使用指数i,无论如何,条形图可能在时间上是不同的,因为有一些漏掉的条形图。

换句话说,我必须对每个柱子循环使用CopyClose(Symbol, 0, date_of_current_bar,1, array) ?

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyClose
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyClose
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyClose - Документация по MQL5
 

在我看来,老TF的酒吧很少 "消失"。

另一个变种是通过CopyTime()同时获得这个酒吧的时间。

第三种选择(可能是最简单的),在结构上一次使用CopyRates

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyRates - Документация по MQL5