テンプレート・パラメータ = void* のコンパイラ・バグ - ページ 4

 
Dmitry Fedoseev:

ご紹介したリンク先を読んでみましたか?その理由について、Slava氏は「古いMQL4では優先順位が混同されていたからだ」と説明しています。だから今は、注目を集めることが大切なんです。警告だけなのも困りもので、エラーになればもっといいのですが。

あるいは、平手打ち

 
Dmitry Fedoseev:

ご紹介したリンク先を読んでみましたか?その理由について、Slava氏は「古いMQL4では優先順位が混ざって いたからだ」と説明しています。だから今は、注目を集めることが大切なんです。警告だけなのも困りもので、エラーが出ればもっといいのですが。

それで?これです。

int i = 1 << 2 + 3;

また、MQL4では優先順位がごちゃごちゃになっていた?一般的なアプローチの話であって、特殊なケースではないのです。特殊なケース では(例外として)警告・エラーを出すことができますが、なぜ他のすべてに拡大する必要があるのでしょうか?

それに、MQL4では(私が知る限り)、||演算子に遅延がないとしましょう。そして、これにもかかわらず、MQL5コンパイラーは同様のケースで警告を生成しない(||を複数のアトム演算に分割することを示唆しない)。

そこから、歴史の対応するページが逆転していることがわかります

 

に加えたい ドキュメンテーションでも言って いること。

"操作の順番を変えるには、優先順位の高い 括弧を 使用します"

ということは、(順序の変更とは関係ない)他の目的での括弧の使用は、やはり正当化されなければなりません。

 
fxsaber:

プログラマーの人数の閾値は、どこでためらうべきなんでしょうね。5では物足りない。1,000では足りません。10,000円~躊躇する。そして、最後にN-信頼です。しかし、(N-1)の時は......まだ信用していませんでした。

閾値は絶対値ではなく、そう思わない人の割合で定義されています。大多数は間違っているかもしれないが、99%ではないことは信頼できる基準である

 
A100:
そして、1961x32ではすべてがうまくいくのですが...。やったー

うーん、面白い機能ですね。これからはプラットフォームのビットレートも指定しよう

 
A100:

それで?これです。

int i = 1 << 2 + 3;

また、MQL4では優先順位がごちゃごちゃになっていたのですか?

はい、ドキュメントに よると、旧バージョンでは優先順位が異なっていたそうです。

しかし、私の考えでは、そんなことはとっくにどうでもよくなっています。また、strict指令が指定されている場合はなおさらです。また、誰かが古いコードを掘り返してコンパイルしようとすると、とにかくそこで多くのことをやり直さなければならない。だから、こうした警告は過去の遺物なのだ。だから、警告を一律に出してはいけないというのは、私も同感です。

 
すみません、もしご存知でしたら、mqlでvoid*ptrからintを取得する方法は(int)StringFormat("%i",ptr)以外にあるのでしょうか?
 
A100:

つまり、あなたのコードでは、ブラケットには何の意味もなく、ステートメントが... は非論理的で、括弧の場合は優先順位や順序が実際に変更されたかどうかを理解する必要がありますが、私のコードでは括弧自体が優先順位や順序の変更を意味します(括弧の有無ですべてが明らかになります)。

括弧
エフエックスセイバー
A100
あるある
分かりにくい
作戦の優先順位が逆転する
ノー
操作の優先順位は変更されていません
オペレーションの優先順位に変更はない

括弧は、式を完全に曖昧にしない。

警告そのものは(括弧についてだけでなく)、エラーについてではなく、エラーの可能性について教えてくれるのです。しかし、あなたは、(括弧に限らず)優先順位はコンパイラで明確に指定されているので、すべての警告を完全に取り除くことを提案しています。

A100:

閾値は絶対値ではなく、そう思わない人の数の%比率で定義されています。ほとんどが間違っているかもしれないが、99%ではないことは信頼できる基準である

絶対的な数字ではなく、相対的な数字についての同じ質問です。98%というのは信頼できる基準なのでしょうか?А 97%?信頼性を疑わなければならない閾値はどこにあるのでしょうか?たとえ、周りの100%の人があなたを殺人狂だと主張しても。それは信頼できる基準なのでしょうか?

 
Ilya Malev:
mqlでvoid*ptrからintを得るのに、(int)StringFormat("%i",ptr)以外の方法があるのか?

のみで、ポインタのアドレスはStringConcatenate() で取得していました。

Cinteger *x = new Cinteger();
   string s;
   int zz=StringConcatenate(s,"*x = ",x);
   Print("OK ",s);
 
Alexey Navoykov:

最も単純な例は、配列クラスです。 この場合、任意のポインタを格納するために使用されます。

このような配列は、はっきり言って使い物になりません。それで何ができるのか?配列のメンバーに対して、自動的にdeleteを呼び出さないことはご存知ですよね?

理由: