gpt4 book ai didi

initialization - 是否省略了多余的默认初始化?

转载 作者:行者123 更新时间:2023-12-04 14:44:20 29 4
gpt4 key购买 nike

与 C 或 C++ 相比,D 的一个奇怪方面是,当未提供赋值值时,变量会根据其类型默认初始化。

int foo() {
int o; // int.init == 0
o++;
return o; // returns 1
}

与 C 和 C++ 相比,C 和 C++ 只是将变量留下潜在的垃圾,而 D 确保永远不会从几乎所有类型的变量中读取垃圾。然而,考虑到这个简单的、仅仅是假设的函数, r在设置为 i 之前永远不会被读取,并且可以肯定的是,分配最终会发生。
int foo2(int n) {
assert(n > 0 && n < 20);
int r;
for (int i = n ; ; i+=7) {
if (i % 3 == 0) {
r = i;
break;
}
}
return r;
}
  • 在确定将在变量中定义的情况下
    future 没有以前的阅读,将默认初始化
    仍然会发生,根据标准?
  • DMD/GDC 编译器是否知道优化它们(例如,省略默认值?
    当该默认值永远不会从
    多变的)?
  • 如果以上都不是,是否有一个很好的解决方法
    有一个完全未初始化的变量?
  • 最佳答案

    1. In a case where it is certain that a variable will be defined in the future without a previous read, will the default initialization still happen, according to the standard?


    由于 D 没有值类型构造函数(默认 struct 构造函数),初始化不应有任何副作用,因此允许编译器对其进行优化。我相信这是死分配消除的一个子集。

    1. Is it known from the DMD/GDC compilers to optimize them out (as in, omitting default initialization when that default value is never read from the variable)?


    语言规范没有对实现必须执行的优化施加限制。上面的例子很重要,所以如果例如,我不会感到惊讶。 DMD 不会将其优化掉,或者 GDC 是否会在最大优化级别上进行优化。

    1. If none of the above, is there a nice work-around to having a completely uninitialized variable?


    是: int r = void;

    关于initialization - 是否省略了多余的默认初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26204185/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com