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

Why int& a=10; is valid in ancient C++ compilers?

本文关键字:编译器 C++ 有效 int 为什么      更新时间:2023-10-16

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

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

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

它曾经是有效的C++将引用绑定到临时的,因此您可以传递例如 double期望int&的函数,如C++的设计与演变§3.7中所解释的那样:

但是,我犯了一个严重的错误,允许非const引用由非左值初始化。[...]
允许引用由非 lvalues 初始化的原因是允许按值调用和按引用调用之间的区别是由被调用函数指定的细节,并且调用方不感兴趣。对于const参考文献,这是可能的,对于非const参考文献则不是。对于 2.0 版,更改了C++的定义以反映这一点。

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