gpt4 book ai didi

d - 在 D 中做 "const pointer to non-const"的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-04 23:20:31 25 4
gpt4 key购买 nike

好的,根据http://dlang.org/const-faq.html#head-const没有办法在 D 中有一个指向非常量的 const 指针。但是有一个很好的做法:在类 const 中声明一个字段,编译器会让你知道如果你忘记初始化它。有什么方法可以保护自己不忘记在 D 中初始化类的指针字段吗?

最佳答案

是的:

void main() {
// ConstPointerToNonConst!(int) a; // ./b.d(4): Error: variable b.main.a default construction is disabled for type ConstPointerToNonConst!int


int b;
auto a = ConstPointerToNonConst!(int)(&b); // works, it is initialized
*a = 10;
assert(b == 10); // can still write to it like a normal poiinter

a = &b; // but can't rebind it; cannot implicitly convert expression (& b) of type int* to ConstPointerToNonConst!int


}

struct ConstPointerToNonConst(T) {
// get it with a property without a setter so it is read only
@property T* get() { return ptr; }
alias get this;

// disable default construction so the compiler forces initialization
@disable this();

// offer an easy way to initialize
this(T* ptr) {
this.ptr = ptr;
}

private T* ptr;
}

关于d - 在 D 中做 "const pointer to non-const"的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28137190/

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