为啥当我们有 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 引用时创建临时对象?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我们在 NSManagedObject 中需要临时 ID
为啥以 const char* 返回时会在此处创建临时字符串? [Stroustrup 的书例]