Lor*_*ins 5 c++ language-lawyer
我有以下内容
char mem_pool[1024*1024*64];
int main() {
// ...
}
Run Code Online (Sandbox Code Playgroud)
我试图彻底了解如何mem_pool初始化.经过大量的搜索,我的结论是:
static关键字中,而是在"在程序之前运行 - 在静态初始化阶段")char ar[N]在函数作用域中所做的那样),而是一个零数组.有人可以帮助我消除语言所保证的内容,如果我错了,还要纠正我吗?
我还想过做以下任何事情
char mem_pool[1024*1024*64] {};
char mem_pool[1024*1024*64] = "";
Run Code Online (Sandbox Code Playgroud)
我怀疑这是一个更好/推荐的做法,但现在我需要了解我的初步问题.
你的理解是正确的.
数组的元素都将被初始化为零,因为该数组具有静态存储持续时间:
[C++11: 3.6.2/2]:具有静态存储持续时间(3.7.1)或线程存储持续时间(3.7.2)的变量应在任何其他初始化发生之前进行零初始化(8.5). [..]
[C++11: 8.5/5]:到零初始化的类型的对象或参考T指:
- 如果
T是标量类型(3.9),则将对象设置为值0(零),作为整数常量表达式,转换为T;- 如果
T是(可能是cv限定的)非联合类类型,则每个非静态数据成员和每个基类子对象都是零初始化的,并且填充初始化为零位;- if
T是一个(可能是cv限定的)联合类型,该对象的第一个非静态命名数据成员被零初始化,并且填充被初始化为零位;- if
T是数组类型,每个元素都是零初始化的 ;- 如果T是引用类型,则不执行初始化.
如果它没有静态存储持续时间,则元素都将具有不确定的值:
[C++11: 8.5/11]:如果没有为对象指定初始化程序,则默认初始化该对象 ; 如果未执行初始化,则具有自动或动态存储持续时间的对象具有不确定的值.[..]
[C++11: 8.5/6]:到默认初始化的类型的对象T是指:
- 如果
T是(可能是cv限定的)类类型(第9节),T则调用默认构造函数(如果T没有可访问的默认构造函数,则初始化是错误的);- 如果
T是数组类型,则每个元素都是默认初始化的 ;- 否则,不执行初始化.
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |