首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于const引用的有关问题

2012-03-22 
关于const引用的问题编译运行环境:VC++ 2008 Express问题来源:C++ Primer中文版P52 OR 英文版Chapter2 Sec

关于const引用的问题
编译运行环境:VC++ 2008 Express
问题来源:C++ Primer中文版P52 OR 英文版Chapter2 Section2.5

是这样的
代码:
double dval=3.14;
const int &ri=dval;

书上解释为:
等价于
int temp=dval;
const int &ri=temp;

这个不错,我验证过;但问题是:
如果我把const int &ri=dval;放在main函数以外会有如下运行错误:
CXX0030:Error:expression cannot be evaluated
而放在main()函数内部则运行不会出错。

注:不管外部内部,编译都通过,并且warning C4244: 'initializing' : conversion from 'float' to 'const int', possible loss of data

信息够详细了吧,求高手给讲解一下这是为什么?

[解决办法]
注:不管外部内部,编译都通过,并且warning C4244: 'initializing' : conversion from 'float' to 'const int', possible loss of data 
类型不对一个是float一个是int
[解决办法]
vc6.0下在main内外都运行通过

warning 是因为将double赋值给int而致(int temp=dval; dval是double类型)
[解决办法]
用devcpp也都过了。并且运行没有报错。
[解决办法]
不安全类型转换
[解决办法]
用DEV-CPP看看
[解决办法]
不报错的那个编译器有问题,引用必须类型匹配,类型不匹配是有问题的

探讨
以下代码运行正确

C/C++ code
#include <iostream>

float dval=8.55f;

int main()
{
const int &ri=dval;
std::cout<<ri;
return 0;
}




以下代码运行错误

C/C++ code
#include <iostream>

float dval=8.55f;
const int &ri=dval;

int main()
{
std::cout<<ri;
return 0;
}




难道真的是编译器的问题,昏死了。

热点排行