Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;:何时初始化声明的变量而不将其赋值?_C++ - Fatal编程技术网

C++ c++;:何时初始化声明的变量而不将其赋值?

C++ c++;:何时初始化声明的变量而不将其赋值?,c++,C++,如果我编译下面的代码作为注释第13行,我会收到一条警告消息,它说警告:“test.test::x”在这个函数中未初始化使用,但是如果我用第13行编译它,编译器不会警告test::x未初始化 我的问题是: 当我在第13行调用第7行时,为什么编译器没有警告我未初始化的变量x,如果x已经初始化,那是什么时候 #include <iostream> class Test { public: int x; void printX(){ std::cout << x

如果我编译下面的代码作为注释第13行,我会收到一条警告消息,它说
警告:“test.test::x”在这个函数中未初始化使用
,但是如果我用第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;
}
#包括
课堂测试
{
公众:
int x;

void printX(){std::cout你的问题真的很让人困惑。不太清楚你在问什么


无论如何,除非您显式地进行初始化,否则原始数据类型不会初始化。这些类型和POD。只需初始化您的所有数据成员。

如果您不进行初始化,它将处于未初始化状态。编译器会尽最大努力帮助您指出错误,但并非总是可能的,您不能依赖这些错误。如果您使用的是最新版本的编译器,您会得到更好的警告

如果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;
}

不,x没有初始化。

哪个特定的编译器?我正在使用g++编译器查找。更有趣的是,警告取决于优化级别:
-O0
(默认)不会发出任何警告,更高级别(即
-O1
)确实发出警告。我希望这是另一种情况。甚至不向函数添加
const
说明符
printX
都有助于禁用优化功能。可能对编译器有更深入了解的人可以提供帮助,我的答案只是猜测。FWIW您应该注意,编译器不需要告诉您idn不初始化
x
。对于静态分析工具来说,这更像是一项工作(编译器只做这么多)。@Yksisarvinen在更高的优化级别上,编译器会对代码进行更多的分析,以确定哪些优化是可能的,因此它会注意到未初始化的使用