【问题标题】:What is the scope of variables declared in a class constructor?类构造函数中声明的变量的范围是什么?
【发布时间】:2010-10-15 23:46:01
【问题描述】:

我很好奇,在类构造函数中声明的不是该类数据成员的变量的范围是什么?

例如,如果一个构造函数需要一个迭代的 int i,这个变量会在构造函数完成后被销毁,还是对程序来说是全局变量?

【问题讨论】:

    标签: c++ constructor scope


    【解决方案1】:

    从这个意义上说,构造函数就像任何其他函数一样——在内部声明的任何变量都有通常的范围限制,一旦构造函数完成,它们肯定都会超出范围并被销毁。

    【讨论】:

    • 谢谢!我只是不确定构造函数是否被视为普通函数。
    • 不完全准确。使用静态存储持续时间定义的对象超出范围,但不会在构造函数完成后被销毁。
    • @AnT 这与其他函数中的静态有什么不同?
    【解决方案2】:

    像任何其他函数一样,如果它是一个局部变量,它将在函数结束时被“销毁”。本地范围。

    【讨论】:

      【解决方案3】:

      正如经常发生的那样,您可能会混淆范围和生命周期的概念,所以我将同时解决这两个问题。

      在构造函数中声明的名称的 范围 与任何本地名称的范围相同(它是 constructor 的事实没有任何区别):名称的范围延伸到声明名称的块的末尾(并且当名称被隐藏时,它可以有“洞”,通过一个甚至“更本地”的实体声明同名)。

      在构造函数中定义的 am 对象的生命周期受与任何本地定义对象的生命周期相同的规则控制(事实上它是一个 构造函数 没有任何区别):一个对象具有自动存储期限的对象在其作用域结束时被销毁,而具有静态存储期限的对象则永远存在。

      【讨论】:

        【解决方案4】:

        在类构造函数中声明的变量在类构造函数的范围内可用,并且没有更高的范围。

        public MyClass() {
           int i = 0; // i is only available inside this constructor.
                      // It can't be used in any other function of this class or any other.
        }
        

        【讨论】:

          【解决方案5】:

          无论函数如何,局部变量在超出范围时都会被销毁。它们不会成为“全球性的”。

          【讨论】:

            【解决方案6】:

            作用域可以是静态的(词法的)或动态的。大多数语言使用词法作用域,这意味着作用域由程序的文本决定(例如“在定义它的大括号集合内”),而不是由您所写内容的含义决定。

            http://en.wikipedia.org/wiki/Scope_(programming)

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2019-08-01
              • 1970-01-01
              • 1970-01-01
              • 2021-06-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多