复制Vs移动 - 给定代码示例

时间:2014-02-14 22:24:17

标签: c++11 c++98

我正在浏览Scott Meyers的一些幻灯片,它有以下代码示例

typedef std::vector<T> TVec;
TVec createTVec();  // factory function
TVec vt;
… 
vt = createTVec();  // in C++98, copy return value to - vt, then destroy return value

我不明白以下几点,如果有人能澄清这一点,我将不胜感激:

  • createTVec是TVec类型堆栈中的对象吗?如果是这样的话 旁边的括号为?

是什么 vt = createTVec();假设是vt = createTVec; ??

1 个答案:

答案 0 :(得分:1)

这是一个功能,你有一个声明:

TVec createTVec();  // factory function

所以它可能看起来像:

TVec createTVec() {
   TVec ret;
   // initialize it
   return ret;
}
  

vt = createTVec();

它将createTVec()函数的结果赋给vt变量。

在C ++ 98中,此函数将使用临时返回向量,因为将使用C ++ 11移动语义。但是,实际上编译器可能(并且可能会)在这种情况下执行(N)RVO - 返回值优化。