c++ - C++中的默认初始化

标签 c++

我对 C++ 中的默认初始化有疑问。有人告诉我非 POD 对象将自动初始化。但是我对下面的代码感到困惑。

为什么当我使用指针时,变量 i 被初始化为 0,而当我声明局部变量时,却不是。我使用 g++ 作为编译器。

class INT {
    public: int i;

};

int main () {

    INT* myint1 = new INT;
    INT myint2;
    cout<<"myint1.i is "<<myint1->i<<endl;
    cout<<"myint2.i is "<<myint2.i<<endl;

    return 0;
}

输出是

myint1.i 为 0

myint2.i 是-1078649848

最佳答案

您需要在 INT 中声明一个 c'tor 并将“i”强制为定义明确的值。

class INT {
public:

    INT() : i(0) {}

 ...
};

i 仍然是一个 POD,因此默认情况下不会初始化。无论您是在堆栈上分配还是从堆上分配都没有区别 - 在这两种情况下,i 的值都是未定义的。

关于c++ - C++中的默认初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2224159/

相关文章:

c++ - 自动初始化?

c++ - 异常的 C++ 链接器错误 - 'Defined in discarded section'

C++ 转换 Windows IAction

c++ - 迭代单链表不工作的驱动程序

c++ - 编写适合 STL 的 C++ 容器

c++ - 如何在 C++ 中抛出未知异常?

c++ - 仅当 Qt 是使用 ltcg 构建时,如何有条件地启用 ltcg?

c++ - 如何使用 ZeroMQ 唤醒线程

c++ - 1D vector - 3D 索引

c++ - 在 Qt Creator 中使用静态库