2

検討:

function x_StrZero(N: Double; W: Integer; D: Integer = 0): String;
var S : String;
begin
  Str(N:W:D,S);   
  S := Trim(S);

これにより、W1057の暗黙の文字列が「ShortString」から「string」にキャストされます。

オンラインドキュメントによると:

procedure Str(const X [: Width [:Decimals]]; var S: String);

だけでなく、

注:ただし、この手順を使用すると、コンパイラーは警告を発行する場合があります。W1057'%s'から'%s'への暗黙の文字列キャスト(Delphi)。

なぜこれでしょうか?

この醜い回避策を防ぎたい:

function x_StrZero(N: Double; W: Integer; D: Integer = 0): String;
var
  S : String;
  SS : ShortString;
begin
  Str(N:W:D,SS);
  S := Trim(String(SS));

私は読んだことがありますShortStringを文字列に割り当てるときにDelphiが警告するのはなぜですか?しかし、それはこれに答えません。

4

2 に答える 2

9
Str(N:W:D,S);   

としてコンパイルされます

S := System._Str2Ext(N, W, D);

ここSystem._Str2Extで、は戻り型が。の関数ですShortStringstringへの割り当てでに変換されSます。警告は簡単には読めませんが、正しいですが、その時点で暗黙の変換があります。したがって、を回避して暗黙的な変換が行われないようにコードを作り直すかStr、警告をオフにするか、警告を無視してください。

于 2012-09-19T11:02:43.023 に答える
0

その特定の警告をオフにすることができます。これは単なるリマインダーであり、ほとんどの場合、プログラムは正常に機能します。コンパイラは、とのように組み込まれている関数のようにString見えます。ShortStringStr()Writeln()

于 2012-09-19T10:46:41.823 に答える