为什么int&a = 10; 在古代C++编译器中有效吗?

Des*_*tor 5 c++ reference turbo-c++ borland-c++

我只是想知道为什么像Turbo c ++ 3.0(蓝屏IDE)和Borland Turbo C++ 4.5等古代编译器在下面的程序中没有报告任何错误.

#include <iostream.h>
int main()
{
  int& a=10;
  cout<<a;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

现代C++编译器不会接受上述程序,但为什么古代编译器允许这样做呢?他们只是在上述程序中显示单个警告.

Jon*_*ely 11

它曾经是有效的C++来绑定对临时的引用,所以你可以传递double给一个期望的函数int&,如C++ §3.7 的设计和演变中所解释的:

但是,我犯了一个严重的错误,即允许非const引用由非左值初始化.[...]
允许通过非左值初始化引用的原因是允许将call-by-value和call-by-reference区分为被调用函数指定的细节,并且对调用者不感兴趣.对于const参考,这是可能的,对于非const参考,它不是.对于版本2.0,更改了C++的定义以反映这一点.

在C++ 2.0(和ISO C++中),临时数只能绑定到const引用.