问题标签 [char-traits]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - STL Character Traits 的意义何在?
我注意到在我的 SGI STL 参考副本中,有一个关于 Character Traits 的页面,但我看不到这些是如何使用的?它们是否替换了 string.h 函数?它们似乎没有被 使用std::string
,例如length()
on 方法std::string
没有使用 Character Traitslength()
方法。为什么存在性格特征,它们是否曾在实践中使用过?
c++ - C++ std::basic_string/char_traits 特化
这与:
我尝试了std::basic_string specialization的解决方案,但问题是 CustomChar 是 wchar_t 的 typedef,我有重新定义(与 std::basic_string 的专业化冲突)。当我不允许更改 CustomChar typedef 时,如何避免使用 chart_traits?
c++ - std::char_traits::assign() 的目的是什么?
为什么你不能只使用赋值运算符而不是使用这个函数?这是干什么用的?
c++ - 为什么这个专门的char_traits和编解码器与 basic_ifstream 模板一起使用 throw std::bad_cast?
Stackoverflow上 已经 有问题询问为什么 basic_fstream<uint8_t>
不起作用。答案说char_traits
它只专门用于char
and wchar_t
(加上char16_t
,char32_t
在 C++11 中),你应该坚持basic_fstream<char>
读取二进制数据并在需要时进行转换。
算了,这还不够好!:)
没有一个答案(我能找到)说明如何专门化char_traits<uint8_t>
并将其与basic_fstream
模板一起使用,或者是否有可能。所以我想我会尝试自己实现它。
在 Windows 7 64 位上使用 Visual Studio Express 2013 RC 并在 Kubuntu GNU/Linux 13.04 64 位上使用 g++-4.7 时,以下编译没有错误。然而,它在运行时抛出一个 std::bad_cast 异常。我无法使用 libc++ 访问 clang++ 来测试该组合。
使用 g++ 和 GNU/Linux 编译和运行:
使用 Visual Studio Express RC 2013:
更改byte_type
为char
给出预期的输出:
为什么会抛出 std::bad_cast ,我该如何解决?
c++ - 如何从 char** 中读取 cstrings?
我有一个char**
函数返回的(一个空终止数组:数组的最后一个元素是NULL)(我无法更改):
我想迭代它并将它的值传递给另一个函数(同样我无法更改):
到目前为止我有这个代码:
但它传递垃圾值。
有没有更好的方法从以空结尾的数组中获取字符串?
相关问题:
有没有办法获得char** ptar
使用 C++11 的长度:
std::char_traits<?>::length
c++ - 如何将 char_traits 算法与自定义迭代器类型一起使用?
我希望能够使用 std::char_traits<...>::length、compare 等函数,但传递自定义迭代器类型而不是指针。这可能吗?如果没有,是否有理由不支持该标准?
c++ - 将 std::string 转换为 ci_string
我使用这种方法为字符串创建了一个不区分大小写的 typedef。现在,我正在尝试将 a 转换std::string
为ci_string
. 以下所有抛出编译器错误:
我花了一些时间试图弄清楚如何重载=
运算符,我尝试使用static_cast
但dynamic_cast
没有成功。我怎样才能做到这一点?
c++ - 如何安全地序列化 std::basic_istream::pos_type?
在我的一个项目中,我必须缓存有关在大文件中找到的某些数据块的位置信息。我已经实现了一个围绕std::basic_istream<char>::pos_type
放置在地图中的小型 API。
现在我需要将这些描述符序列化为字节流并将它们写入磁盘以供进一步使用(在其他 *nix 机器上也是如此)。我已经读到这种类型是平台相关的,但仍然是一种 POD 类型。所以我的问题是:
- 除了偏移量之外,保存一些东西是否会更好?例如
std::fpos<std::mbstate_t>
保持阅读结构的状态? - 如何安全地获取和恢复偏移数据
std::basic_istream<char>::pos_type
(如果需要,还可以获取其他信息)?
先感谢您。
c++11 - VS 2015 std::char_traits操作
在我的工作场所,我们在 VS 2015(更新 3)编译器升级后将std::wstring
字符串类型(包含国际化字符)更改为 from 。std::u16string
由于这个原因,我们看到了大量的性能回归,例如this。
分析器分析表明std::u16string
的std::char_traits<char16_t>
操作,如copy
、和是最受打击的compare
,并且比' 的对应操作花费的时间更长。find
assign
std::wstring
std::char_traits<wchar_t>
这些std::char_traits<wchar_t>
操作是用 来编写的,std::wmem*
而std::char_traits<char16_t>
操作是用 来编写的for loops
。
如果我们将char16_t
type (or std::u16string
) 的这些特征操作更改为使用我们自己定制的特征,我们会看到性能改进,性能与std::wstring
.
我们计划编写我们自己的自定义特征(直到 MS 为下一个版本的 VS 修复它)如下
这样可以吗?这种方法有什么问题吗?
c++ - basic_string 的前导/尾随空格不敏感特征
我正在做很多解析/处理,其中给出了前导/尾随空格和不区分大小写。所以我为std::basic_string
(见下文)制作了一个基本的 char 特征,以节省一些工作。
特征不起作用,问题是basic_string
' 比较调用特征比较,如果评估为 0,则返回大小差异。在basic_string.h
它说...如果比较的结果是非零返回它,否则较短的先排序。看起来他们明确地不希望我这样做......
如果 trait 的比较返回 0 ,那么为什么会有这个额外的“较短”排序?而且,是否有任何解决方法或者我必须自己滚动字符串?