【问题标题】:int i=int(); what happens in D?诠释我=诠释(); D会发生什么?
【发布时间】:2015-10-24 17:30:43
【问题描述】:

考虑以下程序(查看现场演示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 primitive-types value-initialization


    【解决方案1】:

    当一个变量在 D 中声明时,它总是被设置为它的“默认初始化器”,它可以手动访问为T.init,其中T 是类型(例如int.init)。整数类型的默认初始值设定项是 0,布尔值是 false,浮点数是 NaN

    所以你甚至不需要为默认初始化分配一个变量;只是宣布它很好。 int i; 在设置为其他值之前始终为零。

    可以通过将变量初始化为void来显式禁用默认初始化;例如,int i = void;

    【讨论】:

    • 但是tutorialspoint.com/d_programming/d_programming_variables.htm 说“对于没有初始化程序的定义:具有静态存储持续时间的变量被隐式初始化为 NULL(所有字节的值为 0);所有其他变量的初始值未定义。 ”。 & 在我的程序变量中具有自动存储持续时间。
    【解决方案2】:

    在 D 中,任何值都被初始化,它在这里总是给出整数的默认值:0。这比在 C++ 中安全得多,C++ 中只有在可以免费完成的情况下才进行初始化。

    【讨论】:

    • 只有当它可以免费完成?告诉std::vector
    • @chris C++ 中的什么类型与 D 有关系?
    • 注意:当你想要未初始化的值时,你可以使用int i = void;
    • @sigod,我对答案中的陈述给出了一个反例:这比在 C++ 中安全得多,C++ 中只有在可以免费完成的情况下才会进行初始化。
    • @chris 我承认我对 std::vector 内部的无知,C++ 很复杂,我只是想给出一个经验法则:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 2013-12-08
    • 2011-01-18
    • 2011-11-19
    • 2016-02-16
    • 2012-04-24
    相关资源
    最近更新 更多