D 如何使用类型推断以便删除可能的不可变/常量?

D 如何使用类型推断以便删除可能的不可变/常量?,d,D,如何使用类型推断删除变量声明中的不可变/常量?那有可能吗 immutable uint immutableX = 42; // keep the type (uint) but remove the immutability /* compiler magic */ mutableX = immutableX; 非类型推断解决方案是: uint mutableX = immutableX; 一个完整的例子: void main() { immutable uint immutable

如何使用类型推断删除变量声明中的不可变/常量?那有可能吗

immutable uint immutableX = 42;
// keep the type (uint) but remove the immutability
/* compiler magic */ mutableX = immutableX;
非类型推断解决方案是:

uint mutableX = immutableX;
一个完整的例子:

void main()
{
    immutable uint immutableX = 42;
    pragma(msg, "immutableX: ", typeof(immutableX));
    assert(typeof(immutableX).stringof == "immutable(uint)");

    // how to use type inference so that possible immutable/const is removed ?
    // the expected type of mutableX is uint
    auto mutableX = immutableX;
    pragma(msg, "mutableX: ", typeof(immutableX));
    // this should be true
    assert(typeof(immutableX).stringof == "uint");
}

根据用例的不同,有以下选项,它们删除了最外层的
不可变的
常量
共享的
,等等:

import std.traits : Unqual;
immutable int a = 3;
Unqual!(typeof(a)) b = a;
static assert(is(typeof(b) == int));
更简单的解决方案可能是
cast()

哪一个是正确的取决于您将在何处以及如何使用它

immutable int a = 3;
auto b = cast()a;
static assert(is(typeof(b) == int));