引用必须初始化,并且用一个左值初始化:
int& i = 1;//error, 1不是左值
除非:
const int& i = 1;//ok, 等价于先将1赋给一个临时变量,在将临时变量赋给引用初始化。
(全局变量声明但是未定义的时候,默认初始化为0 。局部变量或者申请内存的变量则不会默认初始化)
struct 和 class 差不多,在声明后,(即使没有定义),在不需要知道其size或者成员的情况下(如声明一个指向它的指针),都可以使用;如果需要知道其size或者具体成员情况,则必须定义后才能用。
struct在开始声明就可用,不是声明结束才能用,如:
struct link; //to be defined later
struct point
{
point* pre;
point* successor;
link* pp;
};
struct link
{
link* self;
};
以下递归声明方式,编译器无法确定结构体大小,如此声明不行:
struct point
{
point obj;
};
另外,声明的时候,class,struct,union,enum 这几种类型都可以和 不是这种类型的变量重名,如
class same{};
int same; //valid
此种情况合法,但是在用到class类的时候,一定每次都要在前面加上前缀:class same,而整形的same则不需要加前缀。
另外,两个struct即使结构完全一致,也不能互相赋值,
如: struct s1{int i;};
struct s2{int i;};
s1 a;
s2 b = a; //error, type mismatch