我一直在SO和其他来源上搜索此事,但我无法解决这个问题.使用rvalues和xvalues的资源对C++来说有点新(使用C++ 11).
现在,我们 - C程序员 - 错过了什么吗?或者C中有相应的技术可以从这些资源效率中受益?
编辑:这个问题不是基于意见.我无法描述我的问题.我要问的是c中是否有相应的技术.
当然,在C中也有类似的技术.我们已经在C中做了"移动语义"多年.
首先,C++中的"移动语义"基于一系列重载决策规则,这些规则描述了在重载决策期间rvalue引用参数的函数如何表现.由于C不支持函数重载,因此这个特定问题不适用于C.您仍然可以通过使用专用名称编写专用数据移动函数并在要移动数据时显式调用它们来手动实现C语言中的移动语义.复制它.例如,对于您自己的数据类型,struct HeavyStruct
您可以使用适当的实现编写a copy_heavy_struct(dst, src)
和move_heavy_struct(dst, src)
函数.在每种情况下,您只需手动选择最合适/最有效的呼叫.
其次,C++中隐式移动语义的主要目的是在深度复制不必要地低效的上下文中作为隐式深层复制语义的替代.由于C没有隐式深拷贝语义,因此在C中甚至不会出现问题.C总是执行浅复制,这已经非常类似于移动语义.基本上,您可以将C视为一种始终移动的语言.它只需要一些手动调整就可以使其移动语义达到完美.
当然,从字面上重现C++移动语义的所有特征可能是不可能的,因为,例如,不可能将C指针绑定到rvalue.但几乎所有东西都可以"模仿".它只需要明确/手动完成更多工作.