xml*_*lmx 1 c++ standards language-design default-value c++11
以下摘录自cppreference链接1和cppreference链接2:
enum codecvt_mode
{
consume_header = 4,
generate_header = 2,
little_endian = 1
};
template
<
class Elem,
unsigned long Maxcode = 0x10ffff,
std::codecvt_mode Mode = (std::codecvt_mode)0
>
class codecvt_utf8_utf16 : public std::codecvt<Elem, char, std::mbstate_t>;
Run Code Online (Sandbox Code Playgroud)
显然,0枚举类型的定义不明确codecvt_mode.C++标准可能会故意保留实现定义的默认值.
但是,我认为实现定义的默认值对用户来说可能是模糊的.
为什么C++ 11定义
std::codecvt_mode Mode = (std::codecvt_mode)0
而不是
std::codecvt_mode Mode = std::little_endian
?
0 是枚举类型的有效值.根据语言标准枚举类型,其基础类型不固定(您的情况)可以表示在足够宽度的位域中可表示的所有整数值(足以表示您声明的所有命名枚举成员).你有时需要一个显式强制转换来强制所有这些值进入枚举类型的事实只是一点点不便.这意味着它0是任何枚举类型的有效值.
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |