最有效地将 std:wstring 分配给 VCL UnicodeString
Assign std:wstring to VCL UnicodeString most effectively
我有一系列 std::wstring
对象需要显示,因此存储在各种 VCL 对象中。
我查看了 VCL String
Assign()
函数的文档,最好是将 count
作为输入但找不到它的函数。
我现在做什么:
my_vcl_object->Caption = my_wstring_text.c_str() ;
根据我在文档中看到的内容,VCL String
operator=()
将 reference
到 String
作为输入。
这是否意味着目前:
- 在构造过程中使用
wchar_t
指针创建了一个(临时)VCL 字符串对象?
- 因此所有字符都被计算到
NULL
个字符
- 然后
Caption
String
复制临时文件的内容。 String
?
或者是否有一个未记录的 operator=()
for String 接受一个 wchar_t
指针并因此避免了第 1 步?
那么第 2 步呢?是否有一个 VCL 函数可以让我使用 wstring length()
作为输入以避免每次都计算字符数?这样Caption
本质上就可以简单的复制内存。
Caption
是一个 String
,在 C++Builder 2007 及更早版本中映射到 AnsiString
,在 C++Builder 2009 中映射到 UnicodeString
和稍后。
=
赋值运算符将整个String
作为输入。所以是的,你的3点分析是正确的。在您的示例中,构建并复制了一个临时 String
。
然而,AnsiString
和 UnicodeString
都有一个接受 2 个参数作为输入的构造函数,一个指向字符数据的指针和一个长度,因此您可以构造临时 String
显式使用多于 1 个参数,例如:
my_vcl_object->Caption = String(my_wstring_text.c_str(), my_wstring_text.length());
我有一系列 std::wstring
对象需要显示,因此存储在各种 VCL 对象中。
我查看了 VCL String
Assign()
函数的文档,最好是将 count
作为输入但找不到它的函数。
我现在做什么:
my_vcl_object->Caption = my_wstring_text.c_str() ;
根据我在文档中看到的内容,VCL String
operator=()
将 reference
到 String
作为输入。
这是否意味着目前:
- 在构造过程中使用
wchar_t
指针创建了一个(临时)VCL 字符串对象? - 因此所有字符都被计算到
NULL
个字符 - 然后
Caption
String
复制临时文件的内容。String
?
或者是否有一个未记录的 operator=()
for String 接受一个 wchar_t
指针并因此避免了第 1 步?
那么第 2 步呢?是否有一个 VCL 函数可以让我使用 wstring length()
作为输入以避免每次都计算字符数?这样Caption
本质上就可以简单的复制内存。
Caption
是一个 String
,在 C++Builder 2007 及更早版本中映射到 AnsiString
,在 C++Builder 2009 中映射到 UnicodeString
和稍后。
=
赋值运算符将整个String
作为输入。所以是的,你的3点分析是正确的。在您的示例中,构建并复制了一个临时 String
。
然而,AnsiString
和 UnicodeString
都有一个接受 2 个参数作为输入的构造函数,一个指向字符数据的指针和一个长度,因此您可以构造临时 String
显式使用多于 1 个参数,例如:
my_vcl_object->Caption = String(my_wstring_text.c_str(), my_wstring_text.length());