为啥当我们有 const 引用时创建临时对象?

Posted

技术标签:

【中文标题】为啥当我们有 const 引用时创建临时对象?【英文标题】: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 引用。 您认为在您的代码中的哪个位置创建了临时对象? 【参考方案1】:

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

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

【讨论】:

以上是关于为啥当我们有 const 引用时创建临时对象?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我们可以非常量引用临时对象并延长其生命周期?

const 引用函数参数:是不是可以禁止临时对象?

为啥我们在 NSManagedObject 中需要临时 ID

为啥以 const char* 返回时会在此处创建临时字符串? [Stroustrup 的书例]

为啥要使用引用来获取 *char?当我们使用指针时不使用引用不是更好吗?

为啥在这个例子中可以返回临时对象?