Yog*_*ora 30 c++ optimization copy-and-swap copy-elision
我正在阅读复制和交换.
我尝试阅读Copy Elision上的一些链接,但无法弄清楚它的含义.有人可以解释一下这种优化是什么,特别是下面的文字是什么意思
这不仅仅是为了方便,而且实际上是一种优化.如果参数绑定到左值(另一个非常量对象),则在创建参数时会自动创建对象的副本.但是,当s绑定到rvalue(临时对象,文字)时,通常会省略该副本,从而保存对复制构造函数和析构函数的调用.在赋值运算符的早期版本中,参数被接受为const引用,当引用绑定到右值时,不会发生复制省略.这导致创建和销毁另外的对象.
R S*_*hko 34
存在复制构造函数以进行复制.理论上,当你写一行如:
CLASS c(foo());
Run Code Online (Sandbox Code Playgroud)
编译器必须调用复制构造函数来复制foo()into 的返回值c.
复制省略是一种跳过调用复制构造函数的技术,以免支付开销.
例如,编译器可以安排foo()直接构造其返回值c.
这是另一个例子.假设你有一个功能:
void doit(CLASS c);
Run Code Online (Sandbox Code Playgroud)
如果使用实际参数调用它,编译器必须调用复制构造函数,以便不能修改原始参数:
CLASS c1;
doit(c1);
Run Code Online (Sandbox Code Playgroud)
但是现在考虑一个不同的例子,假设你像这样调用你的函数:
doit(c1 + c1);
Run Code Online (Sandbox Code Playgroud)
operator+将要创建一个临时对象(一个右值).而不是在调用之前调用复制构造函数doit(),编译器可以传递由其创建的临时构造operator+并将其传递给它doit().
| 归档时间: |
|
| 查看次数: |
8465 次 |
| 最近记录: |