это вы про то что файл сразу не читается?
это да, прекрасно. но вот с закрытием действительно получается какая то лажа. получается, что нужно открывать файлы заранее, например в main, а дальше передавать IO String или Handle, вместо того чтоб передать просто имя файла.
Очевидно, это значит, что современные компиляторы достаточно умны чтобы из a=a+1 получить inc eax. Так что писать a=a+1, a++ или ++a скорее дело вкуса, чем оптимизация.
Почему обязательно нарушить? Объект может быть вполне законным образом удален:
Foo* pFoo = new Foo;
Foo& rFoo(*pFoo);
delete pFoo;
Более того — ссылку rFoo теперь можно переназначить только используя placement new (который вобщем то не для того придумывался). Так что ссылки это один из многочисленых костылей C++.
Почему же маразм? Главная задача — написать один раз и чтобы везде работало. При этом было бы круто если бы оно мимикрировало под каждую из поддерживаемых платформ. А по вашему идея чтобы оно выглядело одинаково, но как говно противоестественно на всех платформах
это вы про то что файл сразу не читается?
это да, прекрасно. но вот с закрытием действительно получается какая то лажа. получается, что нужно открывать файлы заранее, например в main, а дальше передавать IO String или Handle, вместо того чтоб передать просто имя файла.
Не иначе с помощью макросов и нового рефлекшена :-)
msvc 2010 release /Ox:
a = a + 1; 0032101A mov eax,dword ptr [esp+4] cout << a << "\n"; 0032101E mov ecx,dword ptr [__imp_std::cout (322048h)] 00321024 inc eax 00321025 push offset ___xi_z+30h (322124h) 0032102A push eax 0032102B mov dword ptr [esp+0Ch],eax 0032102F call dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (322068h)] 00321035 push eax 00321036 call std::operator<<<std::char_traits<char> > (321120h)
Более того — ссылку rFoo теперь можно переназначить только используя placement new (который вобщем то не для того придумывался). Так что ссылки это один из многочисленых костылей C++.
как говнопротивоестественно на всех платформах