[英]Can a compiler be instructed to elide away the copy of variant_t being returned in C++?
我希望在数据库访问代码中编写一个方法:
variant_t GetQueryRows (...)
我想称之为:
const variant_t result = GetQueryRows (...)
尽管我可以做到,但对profile_t的复制在我的探查器结果中显示出很高的水平。 因此,我需要确保variant_t不被复制。 在variant_t中没有移动构造函数或移动分配,并且我无法修改variant_t的源以添加一个。
除了通过out参数返回“结果”这一显而易见的事情,我还能在Visual Studio 2012中使用C ++做任何事情吗?
您无法做任何保证。 如果可能的话,编译器通常会通过返回值优化来消除此副本,但有一些警告。
在GetQueryRows
,应该仅从函数的一点返回一个命名变量;该变量仅从函数的一点返回。 多次返回,或可能返回一个值或另一个值的返回值,会中断返回值优化。 您不能抛出任何异常。
如果要保证行为,则使用输出参数是唯一可靠的方法。
如果这样构造GetQueryRows
则很可能发生通过返回值优化进行复制省略的情况:
const variant_t GetQueryRows() {
variant_t result; // Exactly one declaration of return value
... // arbitrary code
return result; // Exactly one return statement.
}
参考: http : //msdn.microsoft.com/zh-cn/library/ms364057(v=vs.80).aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.