对 char 类型或值为 char 类型的表达式做 sizeof 操作保证得 1
因为 sizeof 返回整个数组在内存中的存储长度,所以用 sizeof 数组的结果除以 sizeof 其元素类型的结果,即可求出数组元素的个数:
// sizeof(ia)/sizeof(*ia) returns the number of elements in ia int sz = sizeof(ia)/sizeof(*ia);
对指针做 sizeof 操作将返回存放指针所需的内在大小;注意,如果要获取该指针所指向对象的大小,则必须对指针进行引用。
Sales_item item, *p; // three ways to obtain size required to hold an object of type Sales_item sizeof(Sales_item); // size required to hold an object of type Sales_item sizeof item; // size of item 's type, e.g., sizeof(Sales_item) sizeof *p; // size of type to which p points, e.g., sizeof(Sales_item)
如果我们希望对 iter 所指向的值做自增操作,则必须使用圆括号强制实现我们的目的:
(*iter)++; // increment value to which iter refers and yield unincremented value
如果不提供显式初始化,动态创建的对象与在函数内定义的变量初始化方式相同(第 2.3.4 节)。对于类类型的对象,用该类的默认构造函数初始化;而内置类型的对象则无初始化。
string *ps = new string; // initialized to empty string int *pi = new int; // pi points to an uninitialized int
同样也可对动态创建的对象做值初始化(value-initialize)(第 3.3.1 节):
string *ps = new string(); // initialized to empty string int *pi = new int(); // pi points to an int value-initialized to 0 cls *pc = new cls(); // pc points to a value-initialized object of type cls const int *pci = new const int(1024);与其他常量一样,动态创建的 const 对象必须在创建时初始化,并且一经初始化,其值就不能再修改。上述 new 表达式返回指向 int 型 const 对象的指针。与其他 const 对象的地址一样,由于 new 返回的地址上存放的是 const 对象,因此该地址只能赋给指向 const 的指针。
对于类类型的 const 动态对象,如果该类提供了默认的构造函数,则此对象可隐式初始化:
// allocate default initialized const empty string const string *pcs = new const string;new 表达式没有显式初始化 pcs 所指向的对象,而是隐式地将 pcs 所指向的对象初始化为空的 string 对象。内置类型对象或未提供默认构造函数的类类型对象必须显式初始化。