所以,我遇到了一个有趣的方法签名,我不太明白,它是这样的:
void Initialize(std::vector< std::string > & param1, class SomeClassName * p);
我不明白的是“class”关键字被用作参数,为什么会出现?是否有必要指明或纯粹是肤浅的?
答案 0 :(得分:16)
这是该课程的前瞻性声明。它与
实际上是一样的class SomeClassName;
void Initialize(std::vector< std::string > & param1, SomeClassName * p);
在许多情况下,前瞻性声明是有用的;在this answer to another question中有一个前瞻性声明可以做和不能做的事情清单。
答案 1 :(得分:1)
这不是肤浅的。它允许您将“SomeClassName”指定为参数,即使尚未定义“SomeClassName”。
答案 2 :(得分:1)
最肤浅的。在C中,定义结构时:
struct x {
int member;
char member2;
};
要使用它,您必须使用struct x whatever
。如果您想单独使用x
作为名称(前面没有struct
),则必须使用typedef
:
typedef struct x {
int member;
char member2;
} x;
但是,在C ++中,第一个(没有typedef
)与第二个具有大致相同的效果(都定义x
,因此您可以单独使用它,而不需要struct
它)。在C ++中,class
与struct
基本相同,只是它默认为private
而不是public
(对于成员和继承)。
唯一有区别的地方是,如果在函数声明的范围内没有class
的定义。
答案 3 :(得分:0)
和你写的一样:
for(int i=0;i<10;i++)
as
int i;
for(i=0;i<10;i++)
类声明是一个定义和指向它的指针