相关疑难解决方法(0)

为什么绑定到三元组的const引用会复制?

我很困惑这个:

#include <iostream>
struct X {};
void f( const X &x ) { std::cerr << &x << "\n"; }

static X x;
int main()
{
  f( x ); // Off stack address
  f( false ? X() : x ); // Different address on stack.
}
Run Code Online (Sandbox Code Playgroud)

为什么f的第二次调用会产生临时副本?

编辑:这个问题不是关于类型X,而是复制的事实.我从接受的答案中忽略了值类别的过剩,并且期望f的参数直接绑定在x或X()上,就像将其重新表述为if语句一样.

c++

11
推荐指数
1
解决办法
590
查看次数

如何将引用绑定到 const 参数或新对象?

假设我有这个代码:

void MyFunc(const std::string& param) {
  std::string maybe_altered_param;
  if (ConditionIsMet()) {
    maybe_altered_param = AlterParam(param);
  } else {
    maybe_altered_param = param; // <-- unnecessary copy 
  }

  // do stuff with maybe_altered_param
  // maybe_altered_param does not need to be modified further.
}
Run Code Online (Sandbox Code Playgroud)

AlterParam函数返回字符串的副本,因此当ConditionIsMet返回 true 时,会创建一个副本以填充 Maybe_altered_pa​​ram。然而,当ConditionIsMet(),这是次优的。在第二种情况下,我只想为同一个对象指定另一个名称,而不需要副本或任何类似的内容。

在这种情况下删除不必要的副本的最简单方法是什么?

c++ move copy-constructor

0
推荐指数
1
解决办法
163
查看次数

标签 统计

c++ ×2

copy-constructor ×1

move ×1