C++03 存在可能隐式发生不必要的副本的问题。为此,C++11引入了rvalue references
and move semantics
。现在我的问题是,这种不必要的复制问题是否也存在于 C# 和 java 等语言中,或者只是 C++ 的问题?换句话说,是否rvalue references
使 C++11 比 C# 或 Java 更高效?
就 C# 而言(允许运算符重载),假设我们有一个数学向量类,并且我们像这样使用它。
vector_a = vector_b + vector_c;
编译器肯定会转变vector_b + vector_c
到某个临时对象(我们称其为vector_tmp
).
现在我不认为 C# 可以区分临时右值,例如vector_tmp
或一个左值,例如vector_b
,所以我们必须将数据复制到vector_a
无论如何,这可以通过使用轻松避免rvalue references
and move semantics
在 C++11 中。
C# 和 Java 中的类引用具有以下一些属性shared_ptr
在 C++ 中。然而,右值引用和移动语义更多地与临时值类型相关,但与 C++ 值类型相比,C# 中的值类型非常不灵活,并且根据我自己的 C# 经验,您最终会得到类,而不是结构,大多数的时间。
所以我的假设是,Java 和 C# 都不会从这些新的 C++ 功能中获益匪浅,这些新功能让代码可以安全地假设某些内容是否是临时的,而不是复制,而是窃取内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)