- 主题:用c++做了一个项目生不如死
其实,std::string 经常在本版被喷
是因为它缺失了 QString 拥有的一些功能(具体是哪个给忘了)
【 在 siyuetian 的大作中提到: 】
: 字符串么,构造查找拼接,不论哪个std::string都吊打QString。
: 不过这无所谓,在qt框架内就用qstring,毕竟gui对性能没啥特殊要求
: c++现在标准一代比一代抽象,核心是还是坚持不为不使用的功能买单这一套,有利有弊吧,反正我觉得还行,每代新标准里我能用到的又能有几个,基本我只关心跟性能强相关的那些
: ...................
--
FROM 120.253.228.*
std::string 最大的问题是它不是 unicode 的。这导致他在现实中几乎无用。对于我们中国人尤其如此。在表情符到处飞的今天,继续用 std::string 就是犯罪啊!
拿它来处理网络流很好用。但它真的不是字符串。
话说,有没有谁做个真正好用的字符串第三方库啊。其它的功能不用搞,就做好字符串就行了。
【 在 easior 的大作中提到: 】
: 其实,std::string 经常在本版被喷
: 是因为它缺失了 QString 拥有的一些功能(具体是哪个给忘了)
--
修改:hgoldfish FROM 117.28.162.*
FROM 117.28.162.*
如果要是这么说的话,你第一个应该考虑的是表情包到底算不算字符。
是不是应该简单的寄希望于string来处理这些根本就不能被定义为字符的东西
【 在 hgoldfish 的大作中提到: 】
: std::string 最大的问题是它不是 unicode 的。这导致他在现实中几乎无用。对于我们中国人尤其如此。在表情符到处飞的今天,继续用 std::string 就是犯罪啊!
: 拿它来处理网络流很好用。但它真的不是字符串。
: 话说,有没有谁做个真正好用的字符串第三方库啊。其它的功能不用搞,就做好字符串就行了。
: ...................
--
FROM 125.119.99.*
00 后已经在用表情符当变量名了啊。
【 在 ziqin 的大作中提到: 】
: 如果要是这么说的话,你第一个应该考虑的是表情包到底算不算字符。
: 是不是应该简单的寄希望于string来处理这些根本就不能被定义为字符的东西
--
FROM 117.28.162.*
那 C++ 宽字符串类型 std::wstring=std::basic_string<wchar_t>
与 std::u16string、std::u32string 行不行呢 它们都是 Unicode 的
不过牵涉到多字节编码的字符,字符串处理器来比较麻烦
【 在 hgoldfish 的大作中提到: 】
: std::string 最大的问题是它不是 unicode 的。这导致他在现实中几乎无用。对于我们中国人尤其如此。在表情符到处飞的今天,继续用 std::string 就是犯罪啊!
: 拿它来处理网络流很好用。但它真的不是字符串。
: 话说,有没有谁做个真正好用的字符串第三方库啊。其它的功能不用搞,就做好字符串就行了。
: ...................
--
修改:easior FROM 120.253.228.*
FROM 120.253.228.*
std::string把他看成个字符串类,那他真的不好用,但问题是这玩意设计上只是个容器。
对于你的需求,如果用到qt的话qstring挺好用,没用qt的话,icu::UnicodeString试试,icu库挺通用的
【 在 hgoldfish 的大作中提到: 】
: std::string 最大的问题是它不是 unicode 的。这导致他在现实中几乎无用。对于我们中国人尤其如此。在表情符到处飞的今天,继续用 std::string 就是犯罪啊!
: 拿它来处理网络流很好用。但它真的不是字符串。
: 话说,有没有谁做个真正好用的字符串第三方库啊。其它的功能不用搞,就做好字符串就行了。
: ...................
--
FROM 114.242.210.*
std::u32string 可以的。就是比较浪费空间。
话说,可以做个优化,自动根据内容,决定使用 u8string u16string 和 u32string.
【 在 easior 的大作中提到: 】
: 那 C++ 宽字符串类型 std::wstring=std::basic_string<wchar_t>
: 与 std::u16string、std::u32string 行不行呢 它们都是 Unicode 的
: 不过牵涉到多字节编码的字符,字符串处理器来比较麻烦
: ...................
--
FROM 117.28.162.*
icu 需要带个庞大的 dll. 也不见得好用吧。
最好是能根据系统像 windows 和 macos 都自带字符编码处理。
【 在 siyuetian 的大作中提到: 】
: std::string把他看成个字符串类,那他真的不好用,但问题是这玩意设计上只是个容器。
: 对于你的需求,如果用到qt的话qstring挺好用,没用qt的话,icu::UnicodeString试试,icu库挺通用的
--
修改:hgoldfish FROM 117.28.162.*
FROM 117.28.162.*
从内存消耗来说,u8string 最省空间
可惜 u8string=basic_string<char8_t> 也只是字节串,并不是真正的字符串
【 在 hgoldfish 的大作中提到: 】
: std::u32string 可以的。就是比较浪费空间。
: 话说,可以做个优化,自动根据内容,决定使用 u8string u16string 和 u32string.
--
FROM 120.253.228.*
如果多用中文的话,应该是 u16string 最省空间。基本上一个汉字对应两个字节。
而且 utf-8 的话,一个汉字基本上对应三个字节。
python 和 Qt 都会做我刚才说的优化,自动根据 unicode 编码范围,选择适合的存储类型来使用。一来可以节省空间,二来提升处理效率。比如 u8string 里面,想要迭代处理一个个 unicode 字符,一会是一个字节,一会儿是三个字节。效率很差。
unicode_string[i]
就这个简单的取下标,都是大麻烦。
【 在 easior 的大作中提到: 】
: 从内存消耗来说,u8string 最省空间
: 可惜 u8string=basic_string<char8_t> 也只是字节串,并不是真正的字符串
--
修改:hgoldfish FROM 117.28.162.*
FROM 117.28.162.*