诠释我=诠释(); D 会发生什么?
int i=int(); what happens in D?
考虑以下程序(查看现场演示 here)
import std.stdio;
void main()
{
int i=int();
writefln("i is %d",i);
}
在像 C++ 这样的语言中,语句 int i=int();
被称为值初始化。对于类型int
,值初始化基本上都是零初始化。如果我没记错的话,C++ 标准保证它总是给我零。但是 D 语言是否像我们在 C++ 中那样具有像值初始化这样的特性?在所有 D 编译器和我编译 & 运行 以上 D 程序的每个环境中,它是否一定给我一个零?
在 D 中任何值都被初始化,它总是给出一个整数的默认值:0。它比在 C++ 中更安全,在 C++ 中只有在可以免费完成时才进行初始化。
当在 D 中声明一个变量时,它总是设置为它的 'default initializer',可以手动访问为 T.init
,其中 T
是类型(例如 int.init
).整数类型的默认初始值设定项是 0
,布尔值是 false
,浮点数是 NaN
.
所以你甚至不需要为默认初始化分配一个变量;只是宣布它很好。 int i;
将始终为零,直到设置为其他内容。
可以通过将变量初始化为 void
来显式禁用默认初始化;例如,int i = void;
.
考虑以下程序(查看现场演示 here)
import std.stdio;
void main()
{
int i=int();
writefln("i is %d",i);
}
在像 C++ 这样的语言中,语句 int i=int();
被称为值初始化。对于类型int
,值初始化基本上都是零初始化。如果我没记错的话,C++ 标准保证它总是给我零。但是 D 语言是否像我们在 C++ 中那样具有像值初始化这样的特性?在所有 D 编译器和我编译 & 运行 以上 D 程序的每个环境中,它是否一定给我一个零?
在 D 中任何值都被初始化,它总是给出一个整数的默认值:0。它比在 C++ 中更安全,在 C++ 中只有在可以免费完成时才进行初始化。
当在 D 中声明一个变量时,它总是设置为它的 'default initializer',可以手动访问为 T.init
,其中 T
是类型(例如 int.init
).整数类型的默认初始值设定项是 0
,布尔值是 false
,浮点数是 NaN
.
所以你甚至不需要为默认初始化分配一个变量;只是宣布它很好。 int i;
将始终为零,直到设置为其他内容。
可以通过将变量初始化为 void
来显式禁用默认初始化;例如,int i = void;
.