外部资源(如std::vector<T>或std::string)的"值类型"问题是复制它们往往非常昂贵,并且副本是在各种上下文中隐式创建的,因此这往往是性能问题.C++ 0x对这个问题的回答是移动语义,它在概念上基于资源窃取的思想,并且由rvalue引用技术驱动.
D是否有类似于移动语义或右值引用的东西?
void foo(T, size_t size)(in T[size] data){...}
//vs
void foo(T, size_t size)(const ref T[size] data){...}
Run Code Online (Sandbox Code Playgroud)
根据/sf/answers/18994111/,pass by value在某些情况下,C++似乎更快.
但是D有一个特殊的关键字in,我想知道什么时候应该使用它.是否in总是导致一个副本还是一个编译器优化?
我可以遵循哪些指导方针帮助我决定const ref和in?
我正在引用这个 SO 答案Does D have something like to C++0x's move semantics?
接下来,您可以通过定义 this(Struct that) 来覆盖 C++ 的构造函数(constructor &&that)。同样,您可以使用 opAssign(Struct that) 覆盖分配。在这两种情况下,您都需要确保销毁它的值。
他举了一个这样的例子:
// Move operations
this(UniquePtr!T that) {
this.ptr = that.ptr;
that.ptr = null;
}
Run Code Online (Sandbox Code Playgroud)
变量会that 一直移动吗?或者that在某些情况下变量可能会被复制?
如果我只将临时副本上的 ptr 置空,那将是不幸的。