代码之家  ›  专栏  ›  技术社区  ›  IceCold

向TIniFile.ReadString传递常量

  •  -1
  • IceCold  · 技术社区  · 7 年前

    我要用吗 每次我给ReadString传递一个cosnant?

    s = MyIni->ReadString (L"ü", L"SomeEntry", "");
    

    Embarcadero示例没有这样说,但是它们在示例中也不使用非ASCII字符。

    1 回复  |  直到 7 年前
        1
  •  3
  •   Remy Lebeau    7 年前

    在C++Builder 2009和以后,整个RTL是基于 System::UnicodeString 而不是 System::AnsiString . 使用 L 前缀告诉编译器创建 宽的 字符串文字(基于 wchar_t )而不是 狭窄的 字符串文字(基于 char ).

    而你不必使用前缀 ,您应该使用它,因为它在运行时调用较少的开销。在Windows上,构造 UnicodeString 从一个 乌恰 字符串只是一个简单的内存副本,而从 烧焦 字符串执行数据转换(使用 System::DefaultSystemCodePage 变量作为用于转换的代码页)。这种转变 五月 对于非ASCII字符是有损的,这取决于 狭窄的 字符串,它受保存源文件的字符集以及编译器在分析源文件时使用的字符集的约束。所以不能保证你在 狭窄的 字符串文字是在运行时实际得到的。使用 宽的 字符串文字避免了这种歧义。

    请注意 单向销毁 所有平台上都有UTF-16编码,但是 乌恰 仅用于Windows上的UTF-16,其中 乌恰 是16位数据类型。在其他平台上 乌恰 通常是用于UTF-32的32位数据类型, char16_t 改为使用。因此,如果需要编写可移植代码,请使用RTL _D() 宏而不是使用 直接加前缀,例如:

    s = MyIni->ReadString(_D("ü"), _D("SomeEntry"), _D(""));
    

    _D() 将字符串/字符文本映射到正确的数据类型( 乌恰 第16章 ,具体取决于要编译的平台)。因此,当在RTL、VCL和FMX库中使用字符串/字符文本时,您应该养成始终使用 _D() .

    推荐文章