我想知道D是多么成熟和稳定,如果它可能是C/C++的一个很好的替代品.
我知道目前有两个标准库(Phobos和Tango).是否仍然没有统一的标准库?
另外我前段时间听说语言在GCed /非GCed代码的边界上存在问题.我在D网站上找不到任何关于它的参考,这个问题仍然是正确的吗?
我刚才已经问了一个类似的问题,但我仍然不清楚一些细节.
在什么情况下postblit构造函数调用?
移动对象的语义是什么?它会被后照亮和/或破坏吗?
如果按值返回局部变量会发生什么?它会被隐含地移动吗?
如何将表达式转换为右值?例如,通用交换如何?
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 置空,那将是不幸的。