初始化变量的不同方法

Different ways to initialize variables

本文关键字:方法 变量 初始化      更新时间:2023-10-16

在c++中有不同的初始化变量的方法。int z(3)等于int z=3

int z;
z(3);

相同
int z;
z=3;

?

您可以使用:

int z;
z = 3;

或只是:

int z = 3;

或:

int z(3);

或:

int z = int(3);

z(3);本身语法无效。唯一有效的方法是,如果你有一个叫做z的函数,你传入整数3。但即使这样也不一定会将局部变量z设置为3。

int z(3);将只能在c++中编译(而不是C)。

int z;z=3;

是有效的语法,将z设置为3。

int z(3)int z; z=3;在本例中是相同的

不,z(3);正在调用一个名为z的函数,参数为3

如果你想用这种语法进行初始化你需要在声明

中进行初始化
int z(3):

你可以像这样初始化z

int z{3};

自c++ 11

以来,这是初始化变量的推荐方法。

语法的优点是,当存在缩小转换时,它会给出一个错误,即如果不能保证值将适合目标变量,则会得到一个编译错误。该语法可用于任何对象。

参考:条目7,Effective Modern c++ by Scott Meyers

不,第一个选项是不正确的:最烦人的解析。编译器认为z是一个函数。然而,这些也基本上是相同的:

int z(3);
int z = 3;

请注意,它们在本例中是相同的,但在对象上,第一个调用匹配的构造函数,而第二个需要重载复制赋值操作符(=)

正如AndersK所建议的,在c++中初始化变量的最佳方法是使用{}。因为它保证了类型安全,所以让我们进一步讨论它。

类型安全

c++中的每个对象都是根据其类型使用的,对象在使用前需要初始化。

安全初始化:{}

编译器在类型转换期间防止信息丢失。例如,
int a{7};初始化OK
int b{7.5}编译器显示错误,因为信息丢失。

不安全初始化:= or ()

编译器不保护类型转换期间的信息丢失。
int a = 7初始化OK
int a = 7.5初始化正常,信息丢失。a的实际值将变为7.0
int c(7)初始化OK
int c(7.5)初始化正常,但会丢失信息。a的实际值将变为7.0