如果有struct
名为tree
。然后,如果我在以下方法中声明指针ptr
。那么这两个陈述之间有什么区别:
struct tree* ptr;
且只有
tree* ptr;
答案 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...
}
这是向后兼容的代价。