我可以在c ++中保留struct undefined中的变量吗?

时间:2013-02-07 15:35:53

标签: c++

我已经定义了这样的结构

Struct rectangle{

int x;
int y;
int z;

};

然后在我的main方法中,我将分配变量:

void main(int argc, const char *argv[])

{

   for(i=0;i<20;i++)

   {

     rectangle[i].x = 20;
     rectangle[i].y = 10;

    }

}

但我不会随时分配结构的'z'变量。我可以这样做吗? 希望我不要问一些非常愚蠢的事情!

提前致谢!

5 个答案:

答案 0 :(得分:5)

是的,没关系。任何使用rectangle[i].z的尝试都会导致未定义的行为, * 但只要您不尝试使用它就不会有问题。

<小时/> *除非rectangle被声明为全局/静态数组,否则其所有成员都被隐式初始化为零。

答案 1 :(得分:3)

你被允许这样做。会员z会有不确定值 因此,如果您使用它,而不为其指定任何值,您将最终得到未定义行为(UB)

但是,如果结构对象是全局或静态对象,则z将隐式初始化为0,您不必担心UB。

答案 2 :(得分:0)

如前所述,它不会造成伤害。您甚至可以打印矩形[i] .z的值来查看之前在堆栈中的内容:)。

答案 3 :(得分:0)

是的,您可以在不声明z的情况下离开,但z的值将是未定义的。

考虑使用结构的默认构造函数,并将rectangle z定义为gloabal或static将其初始化为0,这样您就不必担心它将采用的值

答案 4 :(得分:-1)

像其他人所说的那样,一切都不会发生。但是如果你想要安全起见,请提供一个无参数构造函数(当创建对象数组时,默认情况下会为每个对象调用它):

Struct rectangle{

  int x;
  int y;
  int z;

  rectangle() : x(0), y(0), z(0) {}

};

这样你知道默认情况下会有一些合理的价值。