【问题标题】:Is static concept equivalent to pass by reference concept静态概念是否等同于通过引用概念
【发布时间】:2014-09-06 08:46:08
【问题描述】:

经过一番思考。

变量情况下的static关键字在内存中为变量提供了一个静态位置,即使在调用的函数结束

虽然通过引用传递,意味着您正在传递一个指向函数的指针,因此函数结束后变量保留在内存中。

这是对的还是我没有注意到其他差异?

【问题讨论】:

  • 一个不同之处在于,您传递给被调用函数的地址的变量可以具有autostatic 存储空间。
  • @Don'tYouWorryChild 我没听懂!
  • 关于 static 它的作用因上下文而异。例如,函数局部 static 变量的行为不同于文件全局 static 变量。而且 C 没有传递引用语义。
  • @JoachimPileborg :你说“全局静态变量”,请问为什么要使用全局变量的静态,而“全局”就足够了?
  • @MohamedElShenawy 链接时的链接和可见性:全局静态变量是定义变量的 translation unit 的本地变量,不能被其他翻译单元使用。

标签: c static pass-by-reference


【解决方案1】:

不同之处在于,static 变量是函数私有的。它不能从外部修改,因此该函数可以使用static 变量来保留调用之间的一些内部状态。调用者无法控制static 变量。

当你通过引用传递某些东西时,调用者决定传递哪个对象。每次调用该函数时,它可以是不同的。但是,该函数无法控制对象,只能在一次调用期间对其进行修改。它尤其无法控制引用传递对象的生命周期;这完全取决于调用者。因此,引用的传递对象要么用于

  • 避免复制大对象

  • 返回第二个值(函数初始化对象)

  • 面向对象编程

最后一点最接近将内部状态保存在 static 变量中,但它允许调用者使用任意数量的不同对象,而 static 变量保证只有一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 2013-04-02
    • 2022-09-23
    • 2018-06-03
    相关资源
    最近更新 更多