1、如何选择类型?
*当明确数值不可能为负时,选用无符号类型。
*使用int执行整数运算。在实际应用中,short常常显得太小而long一般和int有一样的尺寸。如果你的数值超过了int的表示范围,选用long long。
*在算术运算中不要使用char和bool,只有在存放字符或布尔值时才使用他们。类型char在一些机器上是有符号的,而在另一些机器上又是无符号的。所以如果使用char类型运算特别容易出现问题。如果需要使用一个不大的整数,可以明确指定它的类型是signed char或者unsigned char。
*执行浮点数运算选用double,这是因为float通常精度不够而且双精度浮点数和单精度浮点数的计算代价相差无几。
2、避免无法预知和依赖于实现环境的行为
某种参数只能在某一种编译器下运行,程序依赖于实现环境的行为。应该尽量避免此种程序。
3、名字的作用域
#include<iostream>
int main()
{
int sum = 0;
//sum 用于存放从1到10的所有的和
for (int val=1;val<=10;++val)
sum + = val; // 等价于sum=sum+val
std::cout<<"Sum of 1 to 10 inclusive is"
<< sum << std::endl;
return 0;
}
这段程序使用了命名空间std,该空间提供了2个名字cout和cin供程序使用。
全局作用域定义在main之外,块作用域在{ }内部。
4、引用
int ival=1024;
int &refval = ival; //refval指向ival(是ival 的另一个名字)
int &refval2; //报错引用必须初始化
引用即别名,一旦引用,就与初始值绑定
引用并非对象,相反的,它只是为一个已经存在的对象所起的另外一个名字。
定义了一个引用之后,对其进行的所有操作都是在与之绑定的对象上进行的:
refval=2;//把2赋给refval指向的对象
int ii = refval;//与ii=ival执行结果一样。
5、指针
指针与引用类似,指针也实现了对其他对象的间接访问。指针与引用相比有很多不同点。
1、指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象。
2、指针无需在定义时赋初值。
定义:
int *ip1, *ip2; // ip1和ip2都是指向int型对象的指针
double dp, *dp2; // dp2是指向double型对象的指针,dp是double型对象
获取对象的地址
指针存放某个对象的地址,要想获得该地址,需要使用取地址符(操作符&):
int ival =42;
int *p = &ival; //p存放变量ival的地址,或者说p是指向变量ival的指针。
double dval ;
double *pd= & dval; //正确:初始值是double型对象的地址
double *pd2=pd; //正确:初始值是指向double对象的指针
int *pi= pd; //错误:指针pi的类型和pd的类型不匹配
pi = &dval ; //错误:试图把double 型对象的地址赋给int型指针
指针值
指针的值(即地址)应属下列4种状态之一:
1、指向一个对象。
2、指向紧邻对象所占空间 的下一个位置。
3、空指针,意味着指针没有指向任何位置
4、无效指针,也就是上述情况之外的其他值。
利用指针访问对象
如果指针指向了一个对象,则允许解引用符(操作符*)来访问对象:
int ival=42;
int *p =&ival ; //p存放着变量ival的地址,或者说p是指向变量ival的指针
cout<<*p ; //由符号*得到指针p所指的对象,输出42
建议:初始化所有指针
const 被设定为仅在文件内有效。当多个文件中出现了同名的const变量时,等同于在不同文件中分别定义了独立的变量。
而且不要显示的初始化变量。