之前见到的有说c中struct A{}B;中B依旧是模板的,但是不对,typedef声明都没有,他不可能是模板。大致关系整理下图。 有无typedef 都是起别名。可以直接A a; B b; 有typedef,但没有B,则编译警告; 如果没有typedef,A是模板,声明方式struct A a或者A a; B是对象,可以直接使用,不能当作模板使用。 c和c++无区别(至少目前我使用LLVM编译器尝试是这样的); 无论有无typedef,A都是模板,都可嵌套,B一直不可嵌套(自身使用),可以省略(当有typedef时B如果省略会编译警告)。