gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:04:20 25 4
gpt4 key购买 nike

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

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

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

最佳答案

它曾经是有效的 C++ 将引用绑定(bind)到临时对象,因此您可以通过例如double 到需要 int& 的函数,如 The Design & Evolution of C++ 中所述§3.7:

I made one serious mistake, though, by allowing a non-const reference to be initialized by a non-lvalue. [...]
The reason to allow references to be initialized by non-lvalues was to allow the distinction between call-by-value and call-by-reference to be a detail specified by the called function and of no interest to the caller. For const references, this is possible, for non-const references it is not. For Release 2.0 the definition of C++ was changed to reflect this.

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

关于c++ - 为什么int&a=10;在古代 C++ 编译器中有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27289834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com