Постоянная ссылка на временный
Вопрос
После прочтения эта статья в блоге Херба Саттера я немного поэкспериментировал и столкнулся с кое-чем, что меня озадачило.Я использую Visual C ++ 2005, но я был бы удивлен, если бы это зависело от реализации.
Вот мой код:
#include <iostream>
using namespace std;
struct Base {
//Base() {}
~Base() { cout << "~Base()" << endl; }
};
int main()
{
const Base & f = Base();
}
При запуске он отображает "~Base()
" дважды...Но если я отменяю комментирование конструктора, он отображает его только однажды!
У кого-нибудь есть объяснение этому?
Решение
Это зависит от реализации.
Стандарт допускает копирование при привязке временной ссылки к постоянной.В вашем случае VC ++ выполняет копирование только тогда, когда конструктор неявно определен.Это неожиданно, но допустимо.
C++1x исправит это.
Не связан с StackOverflow