我今天注意到在示例代码中:
void print(unsigned short a) {
std::cout << a << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
初始化和使用的工作方式如下:
print(short (5));
Run Code Online (Sandbox Code Playgroud)
但不是这样的:
print(unsigned short(6));
Run Code Online (Sandbox Code Playgroud)
main.cpp:16:8:错误:在'unsigned'打印之前预期的primary-expression(unsigned short(6));
并且它与该类型无关,因为这也有效:
typedef unsigned short ushort;
print(ushort (6));
Run Code Online (Sandbox Code Playgroud)
所以我去搜索标准关于值初始化的内容.事实证明:
值初始化的效果是:
1)如果T是类型...
2)如果T是非联盟类型......
2)如果T是类型...
3)如果T是数组类型,..
4)否则,对象是零初始化的.
为便于阅读而进行的修改. 原始来源.
有关POD类型值初始化的规则是什么?unsigned合格类型无法初始化的原因是什么?这更多地与他们的事实有关rvalues吗?