jw.*_*jw. 3 c++ standards initialization
我最初写了一些像这样的代码:
class Foo
{
public:
Foo() : m_buffer()
{}
private:
char m_buffer[1024];
};
Run Code Online (Sandbox Code Playgroud)
比我更聪明的人说使用m_buffer()初始化程序会将内存清零.我的意图是保持记忆不被初始化.我没有时间进一步讨论它,但它激起了我的好奇心.
以前,我曾认为总是在初始化列表中列出每个成员是明智的.
有人可以进一步描述这种行为吗?
1)为什么empty-paren初始化程序会填充内存?
2)它只适用于POD数据类型吗?我听说是这样,但没有标准的方便.
谢谢
Joh*_*itb 11
如果您有一个像这样初始化的成员,它将是value-initialized.对于POD来说也是如此.对于结构体,每个成员都以这种方式进行值初始化,对于数组,它的每个元素都是值初始化的.
标量类型(如指针或整数)的值初始化,您将其初始化为0转换为正确的类型.所以你会得到空指针或虚假或具体的任何类型.
请注意,规则从C++ 98巧妙地改变为C++ 03(我们现在拥有的),这可能会产生惊人的效果.C++ 98没有那个value-initialization.它说默认初始化发生,对于非POD类型总是意味着它的默认构造函数调用.但是value-initialization在C++ 03中,如果没有用户声明的构造函数,则具有特殊意义:然后对每个元素进行值初始化.
这是区别:
struct A { int c; ~A() { } }; // non-POD, but no user declared ctor
struct B { A a; B():a(){ } } b;
Run Code Online (Sandbox Code Playgroud)
现在,在C++ 03中,您将保证b.a.c为零.而在C++ 98中,b.a.c会有一些不确定的值.
| 归档时间: |
|
| 查看次数: |
1275 次 |
| 最近记录: |