エラー、バグ、質問 - ページ 1706 1...169917001701170217031704170517061707170817091710171117121713...3185 新しいコメント Sergei Vladimirov 2016.09.25 15:52 #17051 Комбинатор:おっと、遅くなった、2つ目の例は全然正しくないな。だからこそ、論理的にerror: 'int*' 型の rvalue からの 'int*&' 型の非恒等式参照の初期化が無効です。 はい、すでに上に書きました。2番目のサンプルを修正しましたが、まだうまくいきません。この演算子は値、つまりコピーを返します。3人とも鈍感になったんだろうなぁ、えーっ!)) TheXpert 2016.09.25 15:55 #17052 Sergei Vladimirov: 3人とも、えーっ!というくらい間抜けでなければならなかった。)) では、なぜfxsaberの例の1枚目はうまくいくのでしょうか? Sergei Vladimirov 2016.09.25 16:01 #17053 Комбинатор: では、なぜfxsaberの例の1枚目が動作するのでしょうか?なぜ、そうしないのか?彼はポインタを返す式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]はここでのrvalueです。 まさに、このようなことはありません。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の機能の一種なのでしょうか、プロにはそのような動作はありません。fxsaber さん、どうやってこの構成にたどり着いたのでしょうか?オーバーロード=Aでという意味です。それとも試行錯誤で? TheXpert 2016.09.25 16:51 #17060 ポインタにはr値が割り当てられ、新しいAで上書きされます。 1...169917001701170217031704170517061707170817091710171117121713...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
おっと、遅くなった、2つ目の例は全然正しくないな。
だからこそ、論理的に
error: 'int*' 型の rvalue からの 'int*&' 型の非恒等式参照の初期化が無効です。
3人とも、えーっ!というくらい間抜けでなければならなかった。))
では、なぜfxsaberの例の1枚目が動作するのでしょうか?
なぜ、そうしないのか?彼はポインタを返す式this[0]を持っています。ここでは、同じものを別の形で紹介します。
this[0]はここでのrvalueです。
結果 問題は、ある意味ナンセンスなことです。 残念ながら、それを説明するボキャブラリーは乏しい。
fxsaber:
Точно не так
Результат
問題は、ある種の無意味さ
残念ながら、説明のためのボキャブラリーが乏しいのです。よし、考える気が起きない。もう疲れました。
問題は、rvalueからのポインタ(ディスクリプタ)が変数に代入された後、なぜかlvalueに変わってしまうことです。それはちょっとおかしいな...。
という表現があります。
が真になる。それは、とても理にかなっています。
開発者は、不可能な理由を明確に、そしてきれいに表現する必要があります。
ああ、失敗した。
要するに、全部いいんです :)