本文介绍了为什么g ++对未初始化变量的警告取决于变量的类型? (它警告一个int但不是一个双)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正试图理解在哪些情况下g ++警告未初始化的变量。考虑下面的代码:

I'm currently trying to understand in which cases g++ warns about uninitialized variables. Consider the following piece of code:

#include <iostream>

typedef double barType;

struct foo {

    barType bar;

};

int main() {

    foo f;

    std::cout << f.bar << std::endl;

}



如果我这样编译, / p>

If I compile it like this I get no warning:

$ g++ -O1 -Wall test.cc -o test

但如果我将barType更改为int:

but if I change barType to int:

$ g++ -O1 -Wall test.cc -o test
  test.cc: In function ‘int main()’:
  test.cc:17: warning: ‘f.foo::bar’ is used uninitialized in this function

警告如何取决于类型?在这两种情况下都未初始化。

How can the warning depend on the type? It is uninitialized in both cases.

我正在使用:

$ g++ --version
g++ (Ubuntu 4.4.1-4ubuntu9) 4.4.1
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

感谢,

>

推荐答案

这是未定义的行为,不需要诊断,所以编译器可以自由判断。他们本可以做得更好。

It's undefined behavior, which is not required to be diagnosed, so the compiler is free to make its judgement. They could have done better.

这篇关于为什么g ++对未初始化变量的警告取决于变量的类型? (它警告一个int但不是一个双)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-18 17:38