Joh*_*son 24 c++ terminology initialization declaration language-lawyer
我正在阅读JP Mueller和J. Cogswell撰写的"C++ All-in-One for Dummies"并偶然发现:
#include <iostream>
using namespace std;
int main()
{
int ExpensiveComputer;
int CheapComputer;
int *ptrToComp;
...
Run Code Online (Sandbox Code Playgroud)
这段代码首先初始化所有涉及的东西 - 两个整数和一个指向整数的指针.
只是为了确认,这是一个错误,应该读作'......通过声明',对吧?对我来说,这样的基本错误仍然会出现在书中,这一点很奇怪.
son*_*yao 23
从语言的角度来看,这是默认初始化.问题是,它们被初始化为不确定的值.
否则,什么都不做:具有自动存储持续时间的对象(及其子对象)被初始化为不确定值.
具有自动和动态存储持续时间的非类变量的默认初始化会生成具有不确定值的对象(静态和线程局部对象初始化为零)
请注意,任何读取这些不确定值的尝试都会导致UB.
从标准来看,[dcl.init]/7
默认初始化T类型的对象意味着:
如果T是(可能是cv限定的)类类型([class]),则考虑构造函数.枚举适用的构造函数([over.match.ctor]),并通过重载决策([over.match])选择初始化程序()的最佳构造函数.使用空参数列表调用如此选择的构造函数来初始化对象.
如果T是数组类型,则每个元素都是默认初始化的.
否则,不执行初始化.
| 归档时间: |
|
| 查看次数: |
1823 次 |
| 最近记录: |