【问题标题】:Why temp object created when we have const reference?为什么当我们有 const 引用时创建临时对象?
【发布时间】:2020-02-07 09:13:03
【问题描述】:

当我们有 const 引用时,为什么要创建 temp 对象? 以及为什么我们在复制构造函数中有 const ref?

String::String(const String& old_str) 
{ 
    size = old_str.size; 
    s = new char[size+1]; 
    strcpy(s, old_str.s); 
}

【问题讨论】:

  • 一个问题一个问题。
  • 如果复制构造函数按值获取其参数,则需要复制该值,这会调用复制构造函数,该构造函数按值获取其参数,这意味着它需要被复制...
  • 我认为我们需要更多地了解您的 String 类是如何定义的。
  • “为什么当我们有 const 引用时会创建 temp 对象?” 不是这样,但是临时可以绑定到 const 引用。
  • 您认为在您的代码中的哪个位置创建了临时对象?

标签: c++ c++11 c++14


【解决方案1】:

需要使用 const 限定符声明复制构造函数中的 const 引用,因为当您从另一个对象复制对象时,修改原始对象没有任何逻辑意义。 const 保证您不会意外更改旧字符串 old_str 的内容。

如果在复制构造函数之外创建了新对象,则它是预期的行为。我们正在从 old_str 引用传递的原始对象创建一个新对象

【讨论】:

    猜你喜欢
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    相关资源
    最近更新 更多