为什么引用的常量会影响它是否可以使用不同类型的变量进行初始化?

时间:2011-08-24 20:47:16

标签: c++ reference language-design

为什么这段代码无法编译?

 double d ;
 int & i1 = d // Compilation FAILS  

虽然这个吗?

 double d ;
 const int & i = d // Compilation Succeeds

拜托,我有兴趣了解C ++设计师的想法,他们允许一种行为而不允许另一种行为。

我知道在任何一种情况下都是不道德的,独立于技术上可能与否。 另外,我在mac上使用GCC“-O0 -g3 -Wall -c -fmessage-length = 0”

2 个答案:

答案 0 :(得分:2)

因为它会创建一个临时的int,其中double被转换,并且可变引用无法绑定到临时值,而const则可以。{/ p>

允许可变引用绑定到临时对象的问题相对明显。

Derived* ptr;
Base*& baseptr = ptr;
baseptr = new Base;
ptr->SomeDerivedFunction();

答案 1 :(得分:-1)

当你说

double d = 5.0; 
double &dd = d;

然后dd更改为d更改。但是,如果你要说,

const double &dd = d;

dd const 双引用 - 即使d发生更改,其值也无法更改,这使得其定义中的“引用”部分无法实现。因此,当您使用const时,&会导致创建临时值,并设置引用以引用该临时值。因此,const int & i = d;实际上与允许的const int i = d;相同。