初始化的区别:

时间:2014-01-15 17:52:22

标签: c++

如果有struct名为tree。然后,如果我在以下方法中声明指针ptr。那么这两个陈述之间有什么区别:

struct tree* ptr;

且只有

tree* ptr;

1 个答案:

答案 0 :(得分:1)

第一个是精心设计的类型说明符,并使用特殊名称 在C ++中查找规则,忽略所有非类型名称。该 第二个使用非限定名称查找,并将找到变量和 函数(将导致编译器错误),如果它们 现在,例如:

struct Toto {};
void Toto();

struct Toto myVar;      //  Legal.
Toto myVar;             //  Illegal.

C ++允许这样的定义出于与C的兼容性的原因, 但你应该避免它们;如果你没有非类型和 在同一范围内具有相同名称的类型,没有理由 不要使用

Toto myVar;

,它更加惯用。但是,有时你却没有 有一个选择:Posix标题stat.h定义了struct 和一个名为stat的函数,所以你必须写:

struct stat fileInfo;
if ( stat( filename.c_str(), &fileInfo ) != 0 ) {
    //  error...
}

这是向后兼容的代价。