为什么这段代码无法编译?
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”
答案 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;
相同。