タイピングに関する質問 - ページ 7

 
Dmitry Fedoseev:

人が持つ問題とは何か)))長生きしてやるぞー。

ちなみにd=(double)array[5].to_double() と書く方がd=(double)array[5] よりもずっと簡単 です。押さえるべきポイントだけ です。しかし、私たちは安易な方法を求めているわけではありません。

なぜd=(double)array[5]と書くのか?それは、こんなトリビアに悩まされることはない、ということです。以下は実際のコードの一部です。

MYCRTMFLT(i+1, chart[MYSEG(MYSCNT-i).start].time,
               chart[MYSEG(MYSCNT-i).start].price,
               chart[MYSEG(MYSCNT-i).top].time,
               chart[MYSEG(MYSCNT-i).top].price, 
               chart[MYSEG(MYSCNT-i).top].price>chart[MYSEG(MYSCNT-i).start].price?
                 MYCLRUP : MYCLRDOWN, STYLE_SOLID, true);

chart[index] returns struct {price; time} そして、ほとんどの場合、文脈から理解できるのに、なぜ、.time/.priceを付け続けるのでしょうか?確かに、時にはプロンプトが必要になることもありますが(末尾の行のように)、ほとんどの場合、生活は楽になり、書く量も減ります。

 
Dmitry Fedoseev:

人が持つ問題とは何か)))長生きしてやるぞー。

ちなみにd=array[5].to_double() と書くと、d=(double)array[5] よりもずっと簡単 です。ただ、ドットが押さ れるだけですね。しかし、私たちは安易な方法を求めているわけではありません。

もちろん、コンパイル時にdがdouble以外ありえないことが分かっているのに、d=(double)array[5]と書かなければならない。 ネズミは泣きながら懇願したが、サボテンを噛み続けた...」。

 
Ilya Malev:

もちろん、d=(double)array[5]と書くのは義務です。コンパイル時にdouble以外 にはなり得ないことが分かっているのに・・・ネズミは泣いて頼みましたが、サボテンをかじり続けました・・・。

C++では、Oregatog<=>をdにオーバーロードし、かじる、泣かない;-)。

PS/ と、連想性と優先順位の観点から << 演算子をより適切なものとして使用します。
 
pavlick_:

なぜd=(double)array[5]と書くのか?それは、こんなトリビアに悩まされることはない、ということです。以下は実際のコードの断片です。

chart[index] は struct {price; time} を返します。 そして、ほとんどの場合、文脈から理解 できるのに、なぜ .time/.price を付け続けるのでしょうか?確かに、時にはプロンプトが必要になることもありますが(末尾の行のように)、ほとんどの場合、生活は楽になり、書く量も減ります。

プログラマは(double)をオーバーロードしてarray[5]が何らかのオブジェクトではなく、数値doubleを 返すようにしようと考えて います。そうでしょう?

この文脈は、与えられた例のどこに理解できるのでしょうか。おそらく、MYCRTMFLTのパラメータ型?これは、戻り値の型に関するオーバーロードである。

 
fxsaber:

どうしてもやりたいのであれば

など

 _W(Color)[2] = (uchar)230;              // Записали по смещению 2 значение (uchar)230.
  PRINT(Color)                           // Убедились, что Color теперь C'241,248,230'
ColorToString(Color&(uint(-1)&65535)|(230<<16));と同じではないでしょ うか?

このままあなたのコードを研究していると、脳が壊れてしまいそうで怖いです。

つまり、アンダースコア付きの大文字の多用とコンテキスト解決 操作を除けば、あなたのメソッドのすべてが立派だということです(冗談抜きで)。

もし(コンテキストを解決する操作を)オーバーロードさせたら、ライブラリと一緒に幽体離脱してしまうと思います(笑)。

 
Maxim Kuznetsov:

PS/で、連想性と優先順位により、より適切なものとして<<演算子を使用する

私も率直に言って、思い当たる節がありました。<< を >> でオーバーロードして、苦しまないでください。しかし、T()のオーバーロードを許可することの望ましさがなくなるわけではありません。

 
Dmitry Fedoseev:

私の理解では、ここでオーバーロードしてarray[5]が何らかのオブジェクトではなく、数値doubleを 返すようにしようとしているのでしょう。そうでしょう?

この例のどこに、理解できる文脈があるのでしょうか。MYCRTMFLTパラメータタイプですか?これは、返される値の型に関するオーバーロードである。

全く問題ないと思います。

double d;
d = chart[i];  // call operator double

void f(datetime t);
f(chart[i]);  // call operator datetime

マクロは識別子か関数呼び出しで 終わり、コンパイラはそこから何を期待されているかを理解します。そして、そうならない場合(曖昧さを表す悪態をつくコンパイルエラー)、いつでもそれを助けることができます: chart[i].price

 
Ilya Malev:

もちろん、d=(double)array[5]と書かなければならない。コンパイル時にdouble以外にはなり得ないことが分かっているのに・・・。

dの他にarrayという名前のものもあります。

コンパイラが不適切な型を代入することを警告するのは、まったく悪いことではありません。コンパイラが生成する警告が ないことに後で文句を言われないように、このコードを書いた人は結果に全責任を持っていることをコンパイラに示すべきです。

 
pavlick_:

全く問題ないと思います。

...

私もそうです。
 
Dmitry Fedoseev:

コンパイラが不適切な型を代入することを警告するのは、まったく悪いことではありません。コンパイラの警告が なかったと後で文句を言われないように、これを書いた人が結果に全責任を持っていることをコンパイラに示す必要があります。

ただ、この代入のために、彼自身が operator double(){...} メソッドを定義している場合は別で、明らかに後で double 型の変数の後に (double) と書くとコンパイラの警告が出るようにするためではありません。

一般的には、明らかに話が堂々巡りになっているので、最終的には型のオーバーロードが許可されることを期待しましょう。個人的には、それを可能にするために、オプションのどこかにチェックを入れて、「結果に全責任を持つことに同意します」と確認すれば気にならないのですが。