初始化变量时直接初始化比复制 初始化效率要高
int ival(1024) // direct-initialization
int ival = 1024 // copy-initialization
内置类型变量是否自动初始化取决于变量定义的位置,在函数体外定义的变量都初化成0,在函数体里定义的内置类型变量不进行自动初始化。
只有当extern声明位于函数外部时,才可以含有初始化式。
非const变量默认为extern,要使const变量能够 在其它的文件 中访问,必须显式地指定它为extern.
ex.
// file_1.cc
int counter;// definition
// fle_2.cc
extern int counter; // uses counter form file_1
++counter; // increents counter defined in file_1
//file_1.cc
// defines and initializes a const that is accessible to other files
extern const int bufSize = fcn();
// file_2.cc
extern const int bufSize; // uses buffSize from file_1
// uses bufSize defined in file_1
for (int index = 0; index != bufSize; ++index)
//......
引用是一种复合类型,通过在变量 名前添加“&”符号来定义。每种引用类型都“关联到”某一其它类型。不能定义引用类型的引用,但可以定义任何其它类型的引用。
引用必须用与该引用同类型的对象初始化:
int ival = 1024;
int &refVal = ival;
int &refVal2; /eroor: a reference must be initialized
int &refVal3 = 10; //eroor: initializer must be an object.
引用只是别名
refVal +=2 int ii = refVal;
当引用初始化后,只要该引用存在,它就保持绑定到初始化时指向的对象。不可能将引用 绑定到另一个对象。
const引用是指向const对象的引用;
const int ival = 1024;
const int &refVal = ival; // ok;
int &ref2 = ival; // error;
非const引用只能绑定到与该引用同类型的。const引用可以初始化为不同类型的对象或者初始化为右值,如
int i = 42;
// legal for const references only
const int &r = 42;
const int &r2 = r+1;
const引用是只读的,
比如
double dval = 3.14;
const int &ri = dval;
编译器会转换成如下形式的编码:
int temp = dval; // create temporary int from the double
const int &ri = temp; // bind ri to that temporary
对ri的修改不会修改dval,只支修改temp.
// legal for const
const量必须在定义初始化。
int ival(1024) // direct-initialization
int ival = 1024 // copy-initialization
内置类型变量是否自动初始化取决于变量定义的位置,在函数体外定义的变量都初化成0,在函数体里定义的内置类型变量不进行自动初始化。
只有当extern声明位于函数外部时,才可以含有初始化式。
非const变量默认为extern,要使const变量能够 在其它的文件 中访问,必须显式地指定它为extern.
ex.
// file_1.cc
int counter;// definition
// fle_2.cc
extern int counter; // uses counter form file_1
++counter; // increents counter defined in file_1
//file_1.cc
// defines and initializes a const that is accessible to other files
extern const int bufSize = fcn();
// file_2.cc
extern const int bufSize; // uses buffSize from file_1
// uses bufSize defined in file_1
for (int index = 0; index != bufSize; ++index)
//......
引用是一种复合类型,通过在变量 名前添加“&”符号来定义。每种引用类型都“关联到”某一其它类型。不能定义引用类型的引用,但可以定义任何其它类型的引用。
引用必须用与该引用同类型的对象初始化:
int ival = 1024;
int &refVal = ival;
int &refVal2; /eroor: a reference must be initialized
int &refVal3 = 10; //eroor: initializer must be an object.
引用只是别名
refVal +=2 int ii = refVal;
当引用初始化后,只要该引用存在,它就保持绑定到初始化时指向的对象。不可能将引用 绑定到另一个对象。
const引用是指向const对象的引用;
const int ival = 1024;
const int &refVal = ival; // ok;
int &ref2 = ival; // error;
非const引用只能绑定到与该引用同类型的。const引用可以初始化为不同类型的对象或者初始化为右值,如
int i = 42;
// legal for const references only
const int &r = 42;
const int &r2 = r+1;
const引用是只读的,
比如
double dval = 3.14;
const int &ri = dval;
编译器会转换成如下形式的编码:
int temp = dval; // create temporary int from the double
const int &ri = temp; // bind ri to that temporary
对ri的修改不会修改dval,只支修改temp.
// legal for const
const量必须在定义初始化。