1。
int main()
{
int ival = 3;
cout << (int&)ival << endl;
cout << (float&)ival << endl;
cout << "**********************" << endl;
float fval = 1.0;
cout << (int)fval << endl;
cout << (int&)fval << endl;
return 0;
}
3
4.2039e-045
***********
1
1065353216
ival,强制转换成float,那么内存中存的是浮点数3.0的补码
强制转换成float&,则是内存中补码数据解释成浮点数的补码数据
fval同理
2。
const引用可以引用到不同类型的对象,非const则是不可以的,原因:
int main()
{
float fval = 3.6f;
int &ri = fval; //err cannot convert from 'float' to 'int &'
const int &cri = fval; //ok conversion from 'float' to 'const int', possible loss of data
return 0;
}
对于const int &cri = fval;编译器处理成:
int temp = fval;
const int &cri = temp;
注意:由此可见,临时对象是个右值,无法寻址,但是并不是一个const量,之所以对于临时对象总是用const去引用,因为改变了临时对象,用户也无法寻址,会造成莫名其妙的事件,所以一般均用的const量去引用临时对象,当然可以使用int &ri = temp;编译器不给int &ri = fval;的处理方式,
正为避免此类的情况
int main()
{
int ival = 3;
cout << (int&)ival << endl;
cout << (float&)ival << endl;
cout << "**********************" << endl;
float fval = 1.0;
cout << (int)fval << endl;
cout << (int&)fval << endl;
return 0;
}
3
4.2039e-045
***********
1
1065353216
ival,强制转换成float,那么内存中存的是浮点数3.0的补码
强制转换成float&,则是内存中补码数据解释成浮点数的补码数据
fval同理
2。
const引用可以引用到不同类型的对象,非const则是不可以的,原因:
int main()
{
float fval = 3.6f;
int &ri = fval; //err cannot convert from 'float' to 'int &'
const int &cri = fval; //ok conversion from 'float' to 'const int', possible loss of data
return 0;
}
对于const int &cri = fval;编译器处理成:
int temp = fval;
const int &cri = temp;
注意:由此可见,临时对象是个右值,无法寻址,但是并不是一个const量,之所以对于临时对象总是用const去引用,因为改变了临时对象,用户也无法寻址,会造成莫名其妙的事件,所以一般均用的const量去引用临时对象,当然可以使用int &ri = temp;编译器不给int &ri = fval;的处理方式,
正为避免此类的情况