D 如何声明extern(“C”)常量函数?
我想写d绑定。在类D 如何声明extern(“C”)常量函数?,d,D,我想写d绑定。在类A的生命周期中,其someStruct*成员变量永远不会更改,因此我想将其声明为不可变是很自然的。但是,除非我设法将APICall函数的返回值声明为const,否则它的构造函数不会编译。怎么做 struct someStruct; const someStruct* APICall(); class A { this() { this.ptr = myfunc(); } private: immutable someS
A
的生命周期中,其someStruct*
成员变量永远不会更改,因此我想将其声明为不可变是很自然的。但是,除非我设法将APICall
函数的返回值声明为const
,否则它的构造函数不会编译。怎么做
struct someStruct;
const someStruct* APICall();
class A
{
this()
{
this.ptr = myfunc();
}
private:
immutable someStruct* ptr;
}
错误:function app.APICall如果没有“this”则不能是常量
要在返回值周围使用括号:
const(someStruct*) APICall();
或者,如果它从未改变,不可变
更好。(const
主要用于函数参数,而不是返回值)
函数声明前后不带括号的const或immutable应用于this
参数,这就是为什么错误会这么说:您试图将其应用于不存在的this
但是,在执行此操作之前,请确保它实际上是不可变的——指针永远不会更改,它指向的数据也永远不会更改。如果指针有任何易变性,您应该让它变为易变的。在当前形式中,常量是函数本身。这里是NOOP,但当函数是类或结构的成员时,这意味着对函数的调用不会修改结构或类状态。