2014-12-04 11 views
5

Zastanawiam się po prostu, dlaczego starsze kompilatory, takie jak Turbo C++ 3.0 (niebieski ekran IDE) & Borland Turbo C++ 4.5 itp nie zgłasza żadnego błędu w następnym programie.Dlaczego int & a=10; jest poprawna w starszych kompilatorach C++?

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

Powyższy program nie zostanie zaakceptowany przez współczesne kompilatory C++, ale dlaczego starsze kompilatory na to pozwalają? Po prostu pokazują pojedyncze ostrzeżenie w powyższym programie.

+1

jakie ostrzeżenie one pokazują? i jaki błąd pokazuje aktualny kompilator? –

+0

@MarkFisher: warning: tymczasowy używany do inicjowania a. – Destructor

+8

gosh Pamiętam, kiedy Borland 4.5 był nowy. jak starożytne to mnie czyni? przepraszam za offtopic: -} – Ashalynd

Odpowiedz

11

Kiedyś było prawidłowe C++, aby powiązać odniesienie do tymczasowego, więc można przekazać np. double do funkcji oczekiwano int&, jak wyjaśniono w 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.

W C++, 2.0 (a w ISO C++) tymczasowych może być związana tylko const odniesienia.

Powiązane problemy