我班上有一个const基本字符串:
class foo {
const basic_string<uint16_t> baz;
};
如何初始化它?
我想要实现的主要目标是:
我正在使用c ++ 11。
答案 0 :(得分:2)
如何初始化它?
使用任何basic_string
构造函数。在您的示例中,您使用了默认构造函数。以下是使用初始化列表的示例:
const basic_string<uint16_t> baz {
uint16_t(u't'),
uint16_t(u'e'),
uint16_t(u's'),
uint16_t(u't'),
};
我怀疑使用std::u16string
会更容易:
const std::u16string baz = u"test";
以后可以在需要时将字符转换为uint16_t
(来自char16_t
):
uint16_t c = baz[0];
答案 1 :(得分:2)
您可以将UTF-16文字(u
前缀)与用户定义的后缀组合使用:
std::basic_string<uint16_t> operator "" _u16(char16_t const *begin, std::size_t len)
{
std::basic_string<uint16_t> str;
if (begin != nullptr && len != 0) {
char16_t const *end = begin + len;
str.reserve(len);
std::copy(begin, end, std::back_inserter(str));
}
return str;
}
现在您可以像这样初始化字符串:
std::basic_string<uint16_t> str{u"testing"_u16};
这种方法没有比创建&#34;标准&#34;更多的开销。来自字符串文字的std::string
,因为在任何一种方法中,必须将字符串复制到新的堆分配中。