c ++:什么时候初始化声明的变量而不将其赋给任何值?

时间:2019-01-22 20:10:47

标签: c++

如果我在注释下面的第13行时编译了代码,则会收到警告消息,提示它warning: 'test.Test::x' is used uninitialized in this function,但是如果我在第13行中对其进行编译,则编译器不会警告Test: :x未初始化。

我的问题是:

当我在第13行中调用第7行时,为什么编译器没有警告我有关未初始化的变量x,如果x是在什么时候已经初始化的呢?

#include <iostream>

class Test
{
public:
    int x;
    void printX(){ std::cout << x << std::endl; } // ----------------line 7
};

int main()
{
    Test test;
    // test.printX(); // --------------------------------------------line 13
    std::cout << test.x << std::endl;
    return 0;
}

2 个答案:

答案 0 :(得分:1)

如果不初始化,则未初始化。编译器会尽力帮助您指出您的错误,但并非总是可能的,您不能依靠这些错误。如果您使用最新版本的编译器,则会收到更好的警告。

  

如果x是在什么时候初始化的?

否,x未初始化。

答案 1 :(得分:-1)

您的问题确实令人困惑。不确定您要问什么。

无论如何,除非显式初始化原始数据类型,否则它们不会初始化。这些和POD。只需初始化所有数据成员即可。