mql5言語の特徴、微妙なニュアンスとテクニック - ページ 161 1...154155156157158159160161162163164165166167168...247 新しいコメント Igor Makanu 2020.01.26 21:21 #1601 printf("%s , %f , %i",(string)NULL,(double)NULL,(int)NULL); 2020.01.27 01:15:57.859 tst (EURUSD,H1) (null) , 0.000000 , 0 型変換を 行わない場合、'void'型の'NULL'式は不正となります。 の文字列を初期化することができることがわかりました。 Maxim Kuznetsov 2020.01.26 21:23 #1602 fxsaber: NULLは初期化。この例では、あえて非入力文字列を表示しています。 NULL / NIL(他の用語で)は、定数文字列の実体の初期化にはなりえません。 少なくとも、mqlの文字列はC言語のような「ポインタ」ではないので。特別な状態「何もない」ということはないのです。 追記(あ、自分でも予想外でした。) fxsaber 2020.01.26 21:26 #1603 Maxim Kuznetsov: 彼女は "全く何もない "という特別な状態を持っていません。 トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム mql5の特性、ヒントとコツ fxsaber, 2020.01.26 15:54 void OnStart() { uchar Bytes[]; Print(StringToCharArray(NULL, Bytes)); // 0 Print(StringToCharArray("", Bytes)); // 1 } このコンディションを毎日使っています。 Igor Makanu 2020.01.26 21:27 #1604 Maxim Kuznetsov: 少なくとも、mqlの文字列はC言語のような「ポインタ」ではないので。特別な状態「何もない」ということはないのです。 PS(あ、自分でも予想外でした)。 MQLの文字列は、メモリが割り当てられたエンティティです。 fxsaber このコンディションを毎日使っています。 MQL4ではStringConcatenate()を使って任意のオブジェクトへのポインタをアンセットしていましたので、全く指標にはなりません。) input string s = NULL; void OnStart() { uchar Bytes[]; Print(StringToCharArray(NULL, Bytes)); // 0 Print(StringToCharArray("", Bytes)); // 1 Print(StringToCharArray(s, Bytes)); // 1 } fxsaber 2020.01.26 21:35 #1605 Igor Makanu: それは全く指標になりません、私はMQL4でStringConcatenate()を使用して任意のオブジェクトへのポインタをアンセットします、つまり組み込み関数はMQLルールで実装されていません ))) 。 中身に差はないんです。 トレーディング、自動売買システム、ストラテジーテストに関するフォーラム mql5の特性、ヒントとコツ イゴール・マカヌ さん 2020.01.26 22:27 input string s = NULL; void OnStart() { uchar Bytes[]; Print(StringToCharArray(s, Bytes)); // 1 } NULLじゃないから。それが、本来のメッセージです。 Igor Makanu 2020.01.26 21:41 #1606 fxsaber: 中身がどうであれ、違いはない。 拙稿に貴殿の例を補足 また、入力文字列s = NULLでさらにいくつかの実験をしてみました。 私の理解では、入力変数の値を使おうとしていない間は NULL ですが、他の変数に値を代入したり、単に設定を解除したりすると、NULL は消滅し、メモリは この入力変数に割り当てられます。 fxsaber 2020.01.26 21:41 #1607 Igor Makanu: 私の理解では、ある入力変数の値を使おうとしていない間は、この値はNULLになります。しかし、その時点で、この入力変数の値を他の変数に代入しようとしたり、単にこの入力変数の設定を解除したりすると、このNULLは消えます。つまり、この入力変数にメモリが割り当てられる ことになります 入力変数の操作の仕組みについては、前述で詳しく説明したとおりである。 Maxim Kuznetsov 2020.01.26 22:00 #1608 fxsaber: 中身に差はないんです。 NULLじゃないから。それが、本来のメッセージです。 実体参照に特異性がある(mqlにはポインタはない。C言語ではないので、実体はあるはず) inputは起動時に宣言されるconstであり,物理的に "NULL "という値を与えることはできない. const string nothing=NULL; /// <--- ЭТО ЧТО ? Roman 2020.01.27 00:04 #1609 Nikolai Semko: そう、この挙動はまさに「フールプルーフ」なのでしょう。 どうやら、入力変数は 初期化する必要があるため、すでにメモリ上で少なくとも1バイトを占めているのに、=NULLを 人為的に="" に等しくしているようです。 MQL5ではエントリーが。 は全く同じものです。変数にメモリは確保されない。とにかく、違いは見つかりませんでした。 例えばjavaでは、どちらの場合も変数にメモリが割り当てられていないにもかかわらず、このような記録は微妙に異なっている。最初の変形(String str = null;)は、初期化されたとみなされますが、変数にメモリは割り当てられず、変数は空と表示されることがあります。2番目のケース(String str;)では、その変数を表示しようとすると、初期化されていない変数のエラーが発生します。 つまり、MQL5の方がこの点では寛容です。 どっちがいいのか、自分でもわからない。 変数にメモリが割り当てられないのはなぜですか? メモリが確保され、変数に任意のゴミが入ります。 また、stringが値を出力していないことから、バッファは空であると論理的に判断できる。 char ch; short sh; int in; double db; string st; Print(sizeof(ch)); Print(sizeof(sh)); Print(sizeof(in)); Print(sizeof(db)); Print(sizeof(st)); Print("---------------------"); Print(ch); Print(sh); Print(in); Print(db); Print(st); Nikolai Semko 2020.01.27 00:20 #1610 Roman: 変数にメモリが割り当てられないのはなぜですか? メモリは確保されるが、変数に任意のゴミが入ることはない。 また、stringが値を出力していないことから、バッファは空であると論理的に判断できる。 char ch; short sh; string st; Print(sizeof(ch)); Print(sizeof(sh)); Print(sizeof(st)); string str1; string str2="Однажды, в студёную зимнюю пору я из лесу вышел; был сильный мороз."; Print(sizeof(str1)); // 12 Print(sizeof(str2)); // 12 uchar ch1[],ch2[]; Print(StringToCharArray(str1, ch1)); // 0 Print(StringToCharArray(str2, ch2)); // 68 1...154155156157158159160161162163164165166167168...247 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
2020.01.27 01:15:57.859 tst (EURUSD,H1) (null) , 0.000000 , 0
型変換を 行わない場合、'void'型の'NULL'式は不正となります。
の文字列を初期化することができることがわかりました。
NULLは初期化。この例では、あえて非入力文字列を表示しています。
NULL / NIL(他の用語で)は、定数文字列の実体の初期化にはなりえません。
少なくとも、mqlの文字列はC言語のような「ポインタ」ではないので。特別な状態「何もない」ということはないのです。
追記(あ、自分でも予想外でした。)
彼女は "全く何もない "という特別な状態を持っていません。
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
mql5の特性、ヒントとコツ
fxsaber, 2020.01.26 15:54
このコンディションを毎日使っています。
少なくとも、mqlの文字列はC言語のような「ポインタ」ではないので。特別な状態「何もない」ということはないのです。
PS(あ、自分でも予想外でした)。
MQLの文字列は、メモリが割り当てられたエンティティです。
このコンディションを毎日使っています。
MQL4ではStringConcatenate()を使って任意のオブジェクトへのポインタをアンセットしていましたので、全く指標にはなりません。)
それは全く指標になりません、私はMQL4でStringConcatenate()を使用して任意のオブジェクトへのポインタをアンセットします、つまり組み込み関数はMQLルールで実装されていません ))) 。
中身に差はないんです。
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
mql5の特性、ヒントとコツ
イゴール・マカヌ さん 2020.01.26 22:27
中身がどうであれ、違いはない。
拙稿に貴殿の例を補足
また、入力文字列s = NULLでさらにいくつかの実験をしてみました。
私の理解では、入力変数の値を使おうとしていない間は NULL ですが、他の変数に値を代入したり、単に設定を解除したりすると、NULL は消滅し、メモリは この入力変数に割り当てられます。
私の理解では、ある入力変数の値を使おうとしていない間は、この値はNULLになります。しかし、その時点で、この入力変数の値を他の変数に代入しようとしたり、単にこの入力変数の設定を解除したりすると、このNULLは消えます。つまり、この入力変数にメモリが割り当てられる ことになります
入力変数の操作の仕組みについては、前述で詳しく説明したとおりである。
中身に差はないんです。
実体参照に特異性がある(mqlにはポインタはない。C言語ではないので、実体はあるはず)
inputは起動時に宣言されるconstであり,物理的に "NULL "という値を与えることはできない.
const string nothing=NULL; /// <--- ЭТО ЧТО ?
そう、この挙動はまさに「フールプルーフ」なのでしょう。
どうやら、入力変数は 初期化する必要があるため、すでにメモリ上で少なくとも1バイトを占めているのに、=NULLを 人為的に="" に等しくしているようです。
MQL5ではエントリーが。
は全く同じものです。変数にメモリは確保されない。とにかく、違いは見つかりませんでした。
例えばjavaでは、どちらの場合も変数にメモリが割り当てられていないにもかかわらず、このような記録は微妙に異なっている。最初の変形(String str = null;)は、初期化されたとみなされますが、変数にメモリは割り当てられず、変数は空と表示されることがあります。2番目のケース(String str;)では、その変数を表示しようとすると、初期化されていない変数のエラーが発生します。
つまり、MQL5の方がこの点では寛容です。
どっちがいいのか、自分でもわからない。
変数にメモリが割り当てられないのはなぜですか?
メモリが確保され、変数に任意のゴミが入ります。
また、stringが値を出力していないことから、バッファは空であると論理的に判断できる。
変数にメモリが割り当てられないのはなぜですか?
メモリは確保されるが、変数に任意のゴミが入ることはない。
また、stringが値を出力していないことから、バッファは空であると論理的に判断できる。