2

C++Builder 6 では以下のコード スニペットを正常にコンパイルできますが、RAD Studio Seattle ではコンパイルできません。

  unsigned long x = 50;
  String s = IntToStr(x);

[bcc32 エラー] Unit1.cpp(55): E2015 c:\program files (x86)\embarcadero\studio\17.0\include\windows\rtl\System. SysUtils.hpp:3182' および '_fastcall System::Sysutils::IntToStr(__int64) at c:\program files (x86)\embarcadero\studio\17.0\include\windows\rtl\System.SysUtils.hpp:3183'

IntToStrその定義を確認しました。

C++ビルダー 6:

extern PACKAGE AnsiString __fastcall IntToStr(int Value)/* overload */;
extern PACKAGE AnsiString __fastcall IntToStr(__int64 Value)/* overload */;

C++Builder シアトル:

extern DELPHI_PACKAGE System::UnicodeString __fastcall IntToStr(int Value)/* overload */;
extern DELPHI_PACKAGE System::UnicodeString __fastcall IntToStr(__int64 Value)/* overload */;
extern DELPHI_PACKAGE System::UnicodeString __fastcall UIntToStr(unsigned Value)/* overload */;
extern DELPHI_PACKAGE System::UnicodeString __fastcall UIntToStr(unsigned __int64 Value)/* overload */;

C++Builder 6 と C++ Builder Seattle の違いは何ですか?

4

3 に答える 3

3

基本的に、このシナリオにはあいまいさが存在します。つまり、異なる引数の型 ( intint64 ) を想定して、 IntToStrの 2 つのオーバーロードがあることを意味します。あいまいさは、提供されたlong型を int にダウングレードするか、int64 にアップグレードすることです。ここでは、パラメーターを最も一致する型にキャストする必要があります。

于 2015-11-05T11:37:18.980 に答える
-1

その強力な UnicodeString クラス自体のオーバーロードされたコンストラクターの 1 つを使用するだけで、変数の型ごとに正しいコンバーター関数を見つける複雑さを軽減できます (Delphi で行う必要があります)。

unsigned long x = 50;
String s(x);

また、コード内の任意の場所にString( MyVariableName )を記述して、 MyVariableNameの UnicodeString 表現を取得できます。

CBuilder の古いバージョンでは、StringはAnsiStringの typedef でした。現在、これはUnicodeStringの typedef です。

于 2016-11-26T17:38:26.773 に答える