【发布时间】:2021-09-11 18:40:57
【问题描述】:
mbstate_t 文档says
mbstate_t类型是一个普通的非数组类型,它可以表示在实现定义的一组支持的多字节字符编码规则中可能出现的任何转换状态。mbstate_t的零初始化值代表初始转换状态...
T () ; T t = {} ; (2) T {} ;2) 作为非类类型和没有构造函数的值初始化类类型成员的值初始化序列的一部分,包括未提供初始化器的聚合元素的值初始化。
所以在我看来,这种组合应该保证
std::mbstate_t state = std::mbstate_t();
(如cppreference std::wcsrtombs documentation 中的示例)或
std::mbstate_t state{};
保证将值初始化为零,因为它是 C 类型并且不能是具有构造函数的类。这是正确的还是我忽略了什么?如果是,为什么其他示例(例如 https://www.cplusplus.com/reference/cwchar/mbsinit/ 或 https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/wcsrtombs?view=msvc-160)会这样做
mbstate_t state;
memset(&state, 0, sizeof(state));
【问题讨论】:
-
这些是 C 的例子,对吧?
-
最后的那些? cplusplus.com 并不明确,但 MSDN 肯定是 C++。但他们很可能只是因为移植了一个 C 示例而这样做。
-
标准可能会说些什么,编译器会做一些其他的事情。做一个 std::mbstate_t 状态{};干杯
标签: c++