在D语言中不能通过引用传递

Jer*_*oen 2 d reference pass-by-reference

我在类testclass中有一个构造函数

@safe public nothrow this(ref Socket socket) {
    // Inside class modulename.classname
    this.socket = socket;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我在main方法中初始化这种类型的对象时,我遇到了一些编译错误.

void main() {
    auto variablename = new modulename.classname(
        cast(Socket) new TcpSocket() // main.d line 5
    );
}
Run Code Online (Sandbox Code Playgroud)

错误:

main.d(5): Error: constructor testmodule.testclass.this (ref 
Socket socket) is not callable using argument types (Socket)
main.d(5): Error: no constructor for testclass
Run Code Online (Sandbox Code Playgroud)

为什么我不能通过引用传递套接字?

rat*_*eak 7

你不应该通过ref传递类

默认情况下,类通过引用保存(以避免继承时出现切片问题),因此无论如何您只在两个案例中传递指针

代码中的问题是cast(Socket) new TcpSocket()无法分配的rvalue因此无法通过ref传递