Jan*_*gen 2 delphi unicode delphi-xe2
考虑:
function x_StrZero(N: Double; W: Integer; D: Integer = 0): String;
var S : String;
begin
Str(N:W:D,S);
S := Trim(S);
Run Code Online (Sandbox Code Playgroud)
这使得W1057从'ShortString'到'string'的隐式字符串强制转换
该在线文档说:
procedure Str(const X [: Width [:Decimals]]; var S: String);
Run Code Online (Sandbox Code Playgroud)
但是也
注意:但是,在使用此过程时,编译器可能会发出警告: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));
Run Code Online (Sandbox Code Playgroud)
我已经阅读了为什么在将ShortString分配给字符串时Delphi会发出警告?但这并不能解决这个问题.
小智 9
Str(N:W:D,S);
Run Code Online (Sandbox Code Playgroud)
被编译为
S := System._Str2Ext(N, W, D);
Run Code Online (Sandbox Code Playgroud)
where System._Str2Ext是一个返回类型为的函数ShortString.它将转换为string赋值给S.警告虽然不易读,但是正确的,此时存在隐式转换.因此,要么通过避免Str或者关闭警告或忽略警告来重新编写代码以使其无法进行隐式转换.
| 归档时间: |
|
| 查看次数: |
3604 次 |
| 最近记录: |