- 主题:用c++做了一个项目生不如死
Qt 版主肯定想说,相比 QString 来说,std::string 啥也不是
但离开 std::string,每个 GUI 几乎都有一套自定义的字符串类型,比如 wxString
实际上,QString、wxString、…… 有好多功能是重复的
回过头来看,还是由 std::string 来统一它们比较好
【 在 ziqin 的大作中提到: 】
: 我也不知道你在说什么,好像absl的接口不是给std::string设计的一样。
: protobuf呢?
--
FROM 120.253.228.*
其实,std::string 经常在本版被喷
是因为它缺失了 QString 拥有的一些功能(具体是哪个给忘了)
【 在 siyuetian 的大作中提到: 】
: 字符串么,构造查找拼接,不论哪个std::string都吊打QString。
: 不过这无所谓,在qt框架内就用qstring,毕竟gui对性能没啥特殊要求
: c++现在标准一代比一代抽象,核心是还是坚持不为不使用的功能买单这一套,有利有弊吧,反正我觉得还行,每代新标准里我能用到的又能有几个,基本我只关心跟性能强相关的那些
: ...................
--
FROM 120.253.228.*
那 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.*
从内存消耗来说,u8string 最省空间
可惜 u8string=basic_string<char8_t> 也只是字节串,并不是真正的字符串
【 在 hgoldfish 的大作中提到: 】
: std::u32string 可以的。就是比较浪费空间。
: 话说,可以做个优化,自动根据内容,决定使用 u8string u16string 和 u32string.
--
FROM 120.253.228.*
中文场合如你所说,确实如此
这么一说,std::basic_string<CHAR_T> 并不是一无是处
感觉只需要补强它的字符串功能,就能够等同于 QString 了
【 在 hgoldfish 的大作中提到: 】
: 如果多用中文的话,应该是 u16string 最省空间。基本上一个汉字对应两个字节。
: 而且 utf-8 的话,一个汉字基本上对应三个字节。
--
修改:easior FROM 120.253.228.*
FROM 120.253.228.*
Python 的字符串底层应该是建立在 C 的多字节流之上的吧
C 的这一套处理方案依赖于本地策略集,也容易出现乱码
Python 3 预设了所有编码都是 UTF-8,不知道虚拟机如何处理运行环境的?
C++ 估计跟 C 一样是为了提供最大的编码自由度,运行环境依赖于本地策略集
GUI 程序要是锁死了一个本地策略集(比如俄语),那它的字符串类型也得玩完
【 在 seablue 的大作中提到: 】
: 没办法,C++不愿大刀阔斧动它的标准库。相比之下,python在十几年前的version 3.0中以破坏语言和库的兼容性为代价,以unicode为基础重新设计语言,并且把string和binary分开,是十分明智的,也成就了今天python在云计算、AI领域的地位。早点改,阵痛还比较小。越往后,代码量
: 和用户量越大,越尾大不掉。C++就没有这样的魄力。它一直带着沉重的历史资产包袱。
: 要我说,C++的编程就在kde环境下进行,不考虑非kde环境。只有这样才能抵消C++难用带来的痛苦。
: ...................
--
FROM 120.253.228.*
【 在 hgoldfish 的大作中提到: 】
: 标 题: Re: 用c++做了一个项目生不如死
: 发信站: 水木社区 (Mon Jun 30 16:44:07 2025), 站内
:
: 比如 u8string 里面,想要迭代处理一个个 unicode 字符,一会是一个字节,一会儿是三个字节。
:
: unicode_string[i]
:
: 就这个简单的取下标,都是大麻烦。
如果有运行环境做保障的,根据 UTF-8 编码的校验功能
实现一个 u8string 的下标功能不难
--
FROM 120.253.228.*