在C ++中使用之前声明的规则是什么?

时间:2011-07-20 13:26:15

标签: c++

我的课程说明“C ++在使用块之前需要声明,类型之间但不在类型之内。”

这是什么意思?

int f() {
   if (i)
     return i;
   int i = 1; //allowed?
   return 0;

}

//not allowed?
int g() {
    if (i)
      return i;
    return 0;
}

int i = 1; 

4 个答案:

答案 0 :(得分:13)

没有。你的两个例子都是“一块一块”,这两个都不允许。如果您尝试编译示例代码,则会立即收到错误。

然而,这是允许的:

class Foo {
    int f() {
        return i;
    }

    private:
    int i;
};

这是 类型 ,这是重要的区别。

答案 1 :(得分:4)

这两个都是错的。正确的形式是:

int f() {
   int i = 1;
   if (i)
     return i;
}

int f() { }是一个块。您必须先声明i才能在该块中使用它。

答案 2 :(得分:4)

两者都不被允许。 但是允许的是以下内容:

struct F {
    void f()
    {
      if( i ) return i;
    }

    int i;
};

这里F是一种类型,是用户定义的结构类型。这就是“一种类型”的含义。你的例子都在“一块内”的情况下。

答案 3 :(得分:1)

C ++在块中使用之前需要声明。但是,在struct / class中,无论何时生成此对象,都会隐式生成此声明。调用默认构造函数,它将内存分配给其变量,从而否定未定义的类型问题。

这是我对该行的理解..如果错误,请纠正我如何编译器了解派生数据类型成员的reqd内存空间。