【问题标题】:c++ copy-constructor vs assignment operator [duplicate]c ++复制构造函数与赋值运算符[重复]
【发布时间】:2015-08-04 17:37:56
【问题描述】:

关于密切相关的主题有很多 SO 问题,但我找不到一个能完全解决我的问题的问题。

给定:

std::vector<int> a, b;

以下两种情况有什么区别:

std::vector<int> c(a); // case c(a)
std::vector<int> d = a; // case d=a

还有以后:

c(b); // c(b): does this make sense?
c = b; // or is this better? and if so, why?

【问题讨论】:

  • 所以答案是复制省略和返回值优化是判断我是使用c(b)还是c = b的关键?!我以前从未听说过这些术语。如果不问,我怎么会发现呢?
  • @LightnessRacesinOrbit 反对者。这个问题可能还有其他一些弱点,但我认为它被否决了,因为大多数人认为很容易找到我重复的问题。
  • 你知道“假设”是做什么的:)
  • 我不知道为什么有人选择它作为副本。我确定某处有重复,但肯定不是关于复制省略的问题的重复。
  • 投票重新打开,因为虽然标记的重复问题可能相关,但 OP 提出了不同的问题,并且重复中的答案都没有直接回答它。

标签: c++ copy-constructor assignment-operator


【解决方案1】:

C(b) 是最好的方法...这将调用构造函数,这意味着您的对象将在您开始使用它之前被创建。

最好的方法是理解这一点,如果你创建 c 的 const 对象,第二种方法会给出错误,说对象是只读的,而第一种方法可以工作。

【讨论】:

  • 你的回答毫无意义
  • 当我们经历我提到的场景时,编译器优化就会出现
猜你喜欢
  • 1970-01-01
  • 2013-09-28
  • 1970-01-01
  • 2014-10-12
  • 1970-01-01
  • 2012-03-01
  • 2011-06-09
  • 2011-07-19
  • 1970-01-01
相关资源
最近更新 更多