C ++中局部变量使用的限制?

时间:2011-01-27 23:02:38

标签: c++ oop scope

我在技术面试中遇到了一些问题,我认为我知道,但想要仔细检查(他们说我通过了,但我不确定这些):

  1. 在类方法中声明的变量...可以在该方法之外使用,例如在另一个方法中吗? (我说不)

  2. 在方法中声明的变量是否可以作为参数传递给另一个方法? (我说是,但我不确定)


  3. 这是一个入门级的C ++职位,我已经习惯了C,所以我想仔细检查一下我对C ++ / OO概念的理解。

6 个答案:

答案 0 :(得分:4)

  1. 类方法中的变量,在该方法中实例化并完全包含在该方法中,只能在该方法中使用。它的寿命是有限的。 编辑:澄清一下,我不是说它不能传递到函数范围内的另一个函数调用,我不是在讨论实例化成员变量或静态变量。

  2. 是的,如果从存在的方法中调用该方法,则可以将其传递给另一个方法。为什么?因为它的生命周期与父方法有关,而不是从方法中调用的方法。

  3. 让我说明一下:

    //aVar does not exist.
    int foo(){
       int aVar = 1; //it's been born
       cout << doSomething(aVar); // still alive
    
       return aVar; //still alive but a copy is being returned from the function.  Not aVar itself!
    } // it's dead, man
    

答案 1 :(得分:1)

  1. 通常,变量的生命周期在它声明的块内。因此,在范围的末尾它被销毁。
    但是存在静态局部变量的情况,该情况在方法内声明,但在块完成后该值将保存在内存中。每次调用该函数都会“看到”该变量的值。所以,你可以有一个技巧问题,变量 CAN 可以在该方法的另一个实例中使用。

  2. 是的,你可以通过它。

答案 2 :(得分:1)

与流行的看法相反,在成员函数中声明的变量可以在另一个成员函数中使用。有两条显而易见的途径。

第一个是成员函数调用另一个成员函数,将指向该变量的指针或引用传递给第二个成员函数。变量从调用第一个成员函数到退出该调用之间存在;如果它在那段时间内调用了其他函数,那么其他代码就可以使用该变量(如果成员函数做了某些事情就可以访问它)。

第二个是你正在处理成员函数中定义的 static 变量。这是(例如)迈耶斯单身人士的精髓。静态变量在成员函数中定义,而不仅仅是单例的其他成员,但事实上,访问单例对象的程序的所有其余部分都使用该成员函数中定义的静态变量。

对于第二个问题,你是对的 - 在一个成员函数中定义的变量与任何其他局部变量非常相似。它可以作为参数传递,就像其他任何东西一样。

答案 3 :(得分:0)

第一个问题:是的,你是对的。在类方法范围内声明的变量仅在该范围内有效。当该方法退出时,该变量将失去范围并且不再可用。

第二个问题:是的,该方法可以使用该局部范围的变量调用另一个方法。变量保留在范围内,并且可以在第二个函数调用的持续时间内使用。

答案 4 :(得分:0)

  

首先......声明一个变量   在类方法中....可以   在那种方法之外使用,比如   另一种方法中的实例

在C ++中,没有。

  

其次,可以声明一个变量   在方法内部作为一个传递   另一种方法的参数?

在C ++中,在非并发应用程序中,是的。在并发性的情况下,接收函数通过引用获取其参数,您必须确保在接收函数使用它时传递的对象不会被破坏。

答案 5 :(得分:0)

First of all.....a variable declared inside a Class Method....
can that be used outside of that method, 
like for instance in another method

不确定。例如,

class Base {
 public:
  static Base *create_instance() {
    static int variable_declared_inside_class_method = 0;
    return new Base(variable_declared_inside_class_method);
  }

  Base(int &var_) : var(var_) {}

  int inc_var() {
    var++;  // this method uses variable_declared_inside_class_method 
  }

 private:
  int &var;
};

请注意variable_declared_inside_class_method不在堆栈中。这就是它在这里工作的原因。

Secondly, can a variable declared inside a method be passed as a parameter 
for another method?

绝对