临时对象有范围吗?

fre*_*low 7 c++ scope temporary object lifetime

名称具有范围(编译时属性),而对象具有生命周期(运行时属性).对?

我经常看到人们谈论临时对象"超出范围".但由于临时对象没有名称,我认为在这种情况下讨论"范围"是没有意义的.临时对象的生命周期非常明确,与范围无关.你同意吗?

Mar*_*ork 6

名称有范围(编译时属性),

是.我不会称之为财产.但基本上是的.

对象具有生命周期(运行时属性).对?

有三种类型的变量.每种类型都具有与生命期相关的不同属性.

  • 自动存储时间:
  • 静态存储持续时间
  • 动态存储持续时间

注意:自动存储持续时间对象的生命周期与变量的范围绑定.

我经常看到人们谈论临时对象"超出范围".

除非绑定到变量,否则临时在表达式的末尾被销毁.如果它们绑定到变量(const引用),那么它们与变量具有相同的寿命.有时将其称为范围更容易,但从技术上讲,您是正确的.

但由于临时对象没有名称,我认为在这种情况下讨论"范围"是没有意义的.

技术上是的.但我认为这只会让谈论更容易.对我而言(虽然技术上不正确)临时(未绑定)的范围是表达式.它比临时变量的寿命更容易说.

临时对象的生命周期非常明确,与范围无关.你同意吗?

是.但谈论范围仍然感觉更自然(即使它在技术上不正确).因为大多数人都明白你想要暗示什么.但是当你开始谈论非常技术性的东西时,你应该使用正确的术语和范围在这种情况下是不正确的.