错误、漏洞、问题 - 页 1706 1...169917001701170217031704170517061707170817091710171117121713...3184 新评论 Sergei Vladimirov 2016.09.25 15:52 #17051 Комбинатор:哎呀,我慢下来了,第二个例子根本就不对。这就是为什么符合逻辑的是错误:从'int*'类型的r值初始化'int*&'类型的非const引用无效 是的,我已经在上面写过了。我修改了第二个样本,但它仍然不能工作。该操作符返回一个值,即一个副本。我们三个人都必须变得如此愚钝,嗯!)) TheXpert 2016.09.25 15:55 #17052 Sergei Vladimirov: 我们三个人都得这么笨,嗯!?)) 那么,为什么fxsaber例子的第一块会起作用? Sergei Vladimirov 2016.09.25 16:01 #17053 Комбинатор: 那么,为什么第一块fxsaber的例子会起作用呢?他为什么不应该?他有一个表达式this[0],返回一个指针。这里是同样的事情,以不同的形式。int a; int* Func(int& i) { return(&i); } int* p = Func(a); // работает, то же что A* a = this[0] Func(a) = new int; // не работает, то же, что и this[0] = new int fxsaber 2016.09.25 16:03 #17054 Sergei Vladimirov: this[0]是这里的r值。 确切地说,不是这样的class A { public: int Tmp; void operator =( A* ) { } void operator =( const int Value ) { this.Tmp = Value; } }; class B { public: A* Data[]; B() { ArrayResize(this.Data, 1); } A* operator []( const int Pos ) { return(this.Data[Pos]); } void Init() { // this[0] = new A; // ошибка выполнения: invalid pointer access this.Data[0] = new A; this[0] = 5; // this[0] - НЕ rvalue } }; void OnStart() { B b; b.Init(); Print(b[0].Tmp); } 结果2016.09.25 18:57:42.214 Test (RTS-12.16,M1) 5 这个问题是一些无稽之谈。void A::operator =( A* ) 不幸的是,解释它的词汇很少。 TheXpert 2016.09.25 16:11 #17055 问题是,来自rvalue的指针(描述符)在被分配到一个变量后不知不觉变成了lvalue。这有点疯狂... Sergei Vladimirov 2016.09.25 16:16 #17056 fxsaber: Точно не так Результат问题是某种无意义的东西 不幸的是,用于解释的词汇很少。好吧,我不觉得有什么好想的。已经很累了。 fxsaber 2016.09.25 16:20 #17057 Комбинатор: 问题是,来自rvalue的指针(描述符)在被分配到一个变量后不知不觉变成了lvalue。这有点疯狂... 是的,是我糊涂了。之后 A* a = this[0]; a = new A; // так работает表达方式CheckPointer(this[0]) == POINTER_INVALID将是真实的。这很有意义。开发商应该清楚、漂亮地阐述不可能的原因。this[0] = new A; TheXpert 2016.09.25 16:30 #17058 fxsaber: 是的,我搞砸了。 是的,我被搞糊涂了。我应该在跳枪之前检查一下。总之,这一切都很好 :) Sergei Vladimirov 2016.09.25 16:48 #17059 Комбинатор: 总之,这一切都很好 :) 我还是不明白最后一个例子。在A类中重载"="运算符,将this[0]从rvalue变成lvalue...我想不出来。这是不是MCL的某种特性,在专业术语中没有这种行为。我的意思是过载=在A。还是通过试验和错误? TheXpert 2016.09.25 16:51 #17060 指针被分配一个r值,然后被新的A所覆盖。 1...169917001701170217031704170517061707170817091710171117121713...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
哎呀,我慢下来了,第二个例子根本就不对。
这就是为什么符合逻辑的是
错误:从'int*'类型的r值初始化'int*&'类型的非const引用无效
我们三个人都得这么笨,嗯!?))
那么,为什么第一块fxsaber的例子会起作用呢?
他为什么不应该?他有一个表达式this[0],返回一个指针。这里是同样的事情,以不同的形式。
this[0]是这里的r值。
结果 这个问题是一些无稽之谈。 不幸的是,解释它的词汇很少。
fxsaber:
Точно не так
Результат
问题是某种无意义的东西
不幸的是,用于解释的词汇很少。好吧,我不觉得有什么好想的。已经很累了。
问题是,来自rvalue的指针(描述符)在被分配到一个变量后不知不觉变成了lvalue。这有点疯狂...
表达方式
将是真实的。这很有意义。
开发商应该清楚、漂亮地阐述不可能的原因。
是的,我搞砸了。
总之,这一切都很好 :)