变量初始化(C# 和 C++)

Posted

技术标签:

【中文标题】变量初始化(C# 和 C++)【英文标题】:Variable initializing (C# and C++) 【发布时间】:2012-12-19 04:08:16 【问题描述】:

快速提问,当所有“空白或空”变量不带有正值或负值时,初始化所有“空白或空”变量是否是一种好习惯,例如使用这个:

int value = 0;

代替:

int value;

据我所知,我接受 Visual Studio 编译器,如果变量未事先初始化,默认情况下会自动将变量初始化为 0,但我很好奇最佳实践是什么以及潜在的危险(如果有)是什么.

虽然我特别指的是 VS 环境中的 C# 和 C++ 语言,但这个问题对所有语言和编译器都是开放的。

【问题讨论】:

让我们继续使用 c++ 和 C#,好吗? C++的方式是总是初始化变量。 【参考方案1】:

据我了解,Visual Studio 编译器默认自动将变量初始化为 0,如果它们没有事先初始化

并非总是如此。

范围很重要。类的私有成员会自动分配其默认值,但本地范围的变量(即在方法中声明)则不会。 out 参数不会自动分配。 Value 和 Reference 参数总是被赋值(它们要么传入一个值,要么声明一个默认值)。

C# 将允许您在声明之后 赋值,但不允许 允许您引用未赋值的变量。

【讨论】:

因此必须初始化本地范围内的任何内容。全局变量超出范围会发生什么情况? 在 C# 中,变量总是在类中声明。 C# 没有全局变量。 在 C++ 中,原始类型数据成员不会被零初始化。访问不会进入它。这包括指针。牢记这一点非常重要。 对于 C#,有一个很好的讨论:***.com/questions/2515829/…【参考方案2】:

初始化变量以防止稍后在程序中出现未定义的行为始终是一种好习惯。一些后来的编译器可能会为您执行此操作,但在较低级别未定义变量不能被编译器捕获,并且可能导致一些非常痛苦的头痛。如果您有大量变量,我通常使用大等号语句:

int a,b,c,d,g;
a=b=c=d=g=0; //set all to zero

始终在所有时间都将值存储在变量中是更大的 c++ 哲学的一部分。

【讨论】:

【参考方案3】:

int value = 0; 的初始化语句更可取并且良好的编程习惯有两个原因。

    从可读性的角度来看更好

    它消除了由于未初始化变量而导致问题的可能性(在这种情况下不是,而是在许多其他需要初始化的情况下避免问题的做法)。

【讨论】:

以上是关于变量初始化(C# 和 C++)的主要内容,如果未能解决你的问题,请参考以下文章

C# 基础

总结C++与C#中的static静态修饰符

C++:全局变量和static变量初始化

使用 SWIG 从 C++ 初始化对 C# 共享指针的引用

关于C++全局变量和静态变量初始化的一些总结

C++中类里面定义 静态成员变量的问题