我认为不应编译此代码,但似乎编译器将struct NonExistingNeverDeclaredType*
自变量视为前向声明(proof)。但为什么?
#include <iostream>
int foo(struct NonExistingNeverDeclaredType* arg) {
return sizeof(arg);
}
int main() {
std::cout << foo(nullptr) << std::endl;
return 0;
}
答案 0 :(得分:10)
这是修饰类型说明符的属性,如果先前未声明该类型,它将引入一个声明:
如果名称查找未找到先前声明的类型名称,则通过类,结构或联合(即不是通过枚举)引入elaborated-type-specifier,并且class-name是不合格的标识符,则进行详细说明-type-specifier是类名称的类声明。
它是否在函数参数列表中都没有关系。以下代码也有效:
class foo {
class bar *b; // bar is not previously declared
};