C++中定义变量可以使用:
int i,n(6);
C++语言允许在定义变量时用括号格式赋初始值,如n(6),即变量n的初始值为6。
int n = 6;此时的= 不可读作等于,而是将整形变量n初始化为6。
注意:不可滥用括号赋初值,如对数组就不行
int A[10] ( {22,45,6,1,3,84} ); //语法错
关于等号'='运算符
在C语言中= 运算符称作赋值运算符,但也用于对变量或数组以及指针的初始化。一身兼二职,使许多人搞不清其准确含义。
在C++中给予清晰地规范:只作为运算符,不再承担初始化的职能,初始化工作一律由构造函数完成。但由于还要全面兼容C语言,所以又把C的不清晰带了进来。
int a = 30; //此时的等号是完成了a 的初始化工作,应称为定义符。
C++则提倡写成int a(30); 以示与对象一致。
x = y; //这才是赋值。明显的标志是:前面没有类型名
“声明”是向系统报个到,仅仅是通知;
“定义”是要分配空间的,可以伴随着初始化动作。
//前置声明
struct A;
//后面可以实现A的结构体的定义:
//只是结构体的定义,不分配内存空间
struct A
{
int n;
};
//结构体变量定义,分配了内存空间
struct A a;
// 重复定义,错误
int count;
int count;
// 类型不匹配,错误
extern int ii;
extern short int ii;
// 可以
extern int ii;
extern int ii;
结构体和枚举变量的定义
和C语言不同的是,C++语言的结构体类型、枚举类型是一个真正的类型名,即在C++语言中结构体类型、枚举类型可像其它类型一样使用。系统对待枚举变量将像对待其它变量一样。
在C中使用自定义的结构体:
struct Action
{
int n;
};
定义变量时需要加上关键字struct:
struct Action a;
若不想在定义变量时添加关键字struct,则需要用:
typedef struct Action Act;
Act b;
而在C++中可以直接用结构体名定义变量,不需要处处在结构体名前加关键字struct:
Action c;
枚举类型变量的定义亦同。
作用域限定运算符
C++语言的运算符:: 称作作用域限定运算符,用于解决变量的名字冲突问题,主要用于访问一个在当前作用域内被当前局部变量隐藏的外层全局变量。
int count;
void main(void)
{
float count;
count = 5.5;
::count = 3;
}
变量count有两个定义,定义在函数外的是整型,定义在函数内的是浮点型。定义在函数外的变量count作用域是整个文件,定义在主函数内的变量count作用域是整个主函数。
变量::count就表示出了在当前作用域内被局部变量count隐藏了的全局变量count。
在C语言编程序时,通常用宏来定义常量,如
#define MAXSIZE100;
•用C++语言编程序时,通常用const来定义常量,如
const int MaxSize = 100;
•虽然两种方法均可定义程序中使用的常量,但两种方法有如下两点主要差别:
•(1) 宏定义命令定义的常量只是文本替换,如用100替换MAXSIZE,它没有数据类型;而const定义的常量带有数据类型,如MaxSize就是整数类型。定义有数据类型的常量可使系统进行类型检查,从而防止程序出错。
•(2) 宏定义命令定义的常量的作用域是从定义处到文件结束,或到用宏定义终止命令#undef取消其定义为止;而const定义的常量可像变量那样定义在文件内、函数内、块内或类内。
•显然,用const定义常量更加灵活、方便、广泛。
定义变量或对象的别名时,要求必须在定义时初始化。
被引用的对象可以无名,但绝不可是临时对象。