Login
CStdioFile - bad ptr (Visual C++)
NEW 12.05.06 15:45
in Antwort Simple 12.05.06 15:39
Вряд ли. Для каждого элемента последовательности вызывается string operator( const line& l ) из функтора, компилятор должен создавать временный объект-функтор при этом.
Dropbox - средство синхронизации и бэкапа файлов.
NEW 12.05.06 15:47
in Antwort voxel3d 12.05.06 15:35
Не, один раз. Иначе и строки бы не считались. Его можно впрочем и явно создать, я так делаю, когда мне данные из него позже нужны:
В ответ на:
funct f( someargs );
transform( istream_iterator<line>( ifstream("source.txt") ),
istream_iterator<line>(),
ostream_iterator<string>( ofstream("dest.txt"), "\n" ),
f );
// use f
NEW 12.05.06 15:49
in Antwort voxel3d 12.05.06 15:45
временный объект-функтор создаётся ещё до вызова transform, там же sequence point.
NEW 12.05.06 15:51
in Antwort scorpi_ 12.05.06 15:47
Ммм, а почему он один раз созда╦тся? Это результат оптимизации компилятором или в стандарте есть что-то по-поводу?
Dropbox - средство синхронизации и бэкапа файлов.
NEW 12.05.06 15:53
in Antwort voxel3d 12.05.06 15:51
Так transform же вызывается только один раз :-О
NEW 12.05.06 15:54
in Antwort Simple 12.05.06 15:35
Я даже когда MFC использую пишу почти всё на стандартном С++. Даже такую вот фигню писал, чтобы держать члены диалога в стрингах:
В ответ на:
void AFXAPI DDX_String( CDataExchange* pDX, int nIDC, std::string& value )
{
HWND hWndCtrl = pDX->PrepareEditCtrl( nIDC );
if ( pDX->m_bSaveAndValidate )
{
std::vector< char > v( ::GetWindowTextLength( hWndCtrl ) + 1, 0 );
::GetWindowText( hWndCtrl, &v[0], v.size() );
value = std::string( &v[0], v.size() - 1 );
}
else
SetWindowText( hWndCtrl, value.c_str() );
}
NEW 12.05.06 15:57
in Antwort scorpi_ 12.05.06 15:54
Судя по тому, что я сегодня узнал, стандартные классы гораздо мощнее MFC-подобных, так что это логично, если хорошо знаешь STL.
NEW 12.05.06 16:02
in Antwort Simple 12.05.06 15:53
transform тут не прич╦м. transform это движение source, dest итераторов, запись в объект, на который указывает dest итератор разультата вызова operator() функтора, которому переда╦тся объект, на который указывает source итератор.
Dropbox - средство синхронизации и бэкапа файлов.
NEW 12.05.06 16:08
in Antwort voxel3d 12.05.06 16:02, Zuletzt geändert 12.05.06 16:12 (Simple)
Че-то я плохо понимаю, о чем ты. Мне представляется, что transform - это обычная функция, а раз так, то и объект создается только один раз.
NEW 12.05.06 16:19
in Antwort Simple 12.05.06 16:08
Какой именно объект?
Я сказал о том, как работает функция transform. Там никакие объекты не создаются. Вернее, созда╦тся объект, как оказалось один, но компилятором, неявно. Короче, мой вопрос сводится к тому, что, каково время жизни объекта, при следующем вызове: SomeClass(); где SomeClass -- имя класса.

Я сказал о том, как работает функция transform. Там никакие объекты не создаются. Вернее, созда╦тся объект, как оказалось один, но компилятором, неявно. Короче, мой вопрос сводится к тому, что, каково время жизни объекта, при следующем вызове: SomeClass(); где SomeClass -- имя класса.
Dropbox - средство синхронизации и бэкапа файлов.
NEW 12.05.06 16:24
in Antwort voxel3d 12.05.06 16:19
При хорошем компайлере - ноль - вызов конструктора будет исключен(?) при оптимизации.
При среднем - быдет вызван конструктор и следом - деструктор.
При плохом, а большинство делает именно так - деструктор будет вызван при выходе из области определения.
Если надо точнее - надо рыть стандарт и доки на реализацию...
При среднем - быдет вызван конструктор и следом - деструктор.
При плохом, а большинство делает именно так - деструктор будет вызван при выходе из области определения.
Если надо точнее - надо рыть стандарт и доки на реализацию...
NEW 12.05.06 16:26
in Antwort voxel3d 12.05.06 16:19
Временный объект-функтор :) Он создается перед тем, как вызывается transform, как ты и сказал. Время жизни - 0.1 :) Копия передается transform'у и отмирает после ее окончания.
NEW 12.05.06 16:28
То бишь funct() создаётся до исполнения transform, и живёт до её конца.
in Antwort voxel3d 12.05.06 15:51
В ответ на:
1.9 (8)
Once the execution of a function begins, no expressions from the calling function are evaluated until execution of the called function has completed.
1.9 (17)
When calling a function (whether or not the function is inline), there is a sequence point after the evaluation of all function arguments (if any) which takes place before execution of any expressions or statements in the function body.
5.2.2 (4)
When a function is called, each parameter (8.3.5) shall be initialized (8.5, 12.8, 12.1) with its corresponding argument. ... The lifetime of a parameter ends when the function in which it is defined returns.
5.2.2 (8)
The order of evaluation of arguments is unspecified. All side effects of argument expression evaluations take effect before the function is entered. The order of evaluation of the postfix expression and the argument expression list is unspecified.
1.9 (8)
Once the execution of a function begins, no expressions from the calling function are evaluated until execution of the called function has completed.
1.9 (17)
When calling a function (whether or not the function is inline), there is a sequence point after the evaluation of all function arguments (if any) which takes place before execution of any expressions or statements in the function body.
5.2.2 (4)
When a function is called, each parameter (8.3.5) shall be initialized (8.5, 12.8, 12.1) with its corresponding argument. ... The lifetime of a parameter ends when the function in which it is defined returns.
5.2.2 (8)
The order of evaluation of arguments is unspecified. All side effects of argument expression evaluations take effect before the function is entered. The order of evaluation of the postfix expression and the argument expression list is unspecified.
То бишь funct() создаётся до исполнения transform, и живёт до её конца.
NEW 12.05.06 16:28
in Antwort Murr 12.05.06 16:24
Зачем так глубоко копать? Тут все просто: функция получает копию объекта, сам объект пьот йад, не отходя от кассы :-D Какие к-ры/д-ры вызываются - возле птицы.
NEW 12.05.06 16:30
in Antwort JacksonB 11.05.06 15:35
NEW 12.05.06 16:31
in Antwort voxel3d 12.05.06 16:19
NEW 12.05.06 16:31
in Antwort Murr 12.05.06 16:24
При любом компайлере будут созданы временные объекты классов istream_iterator, ifstream, ostream_iterator, ofstream и funct.
NEW 12.05.06 16:34
in Antwort scorpi_ 12.05.06 16:28
Вс╦, понял, с количеством вызовов вопрос закрыт - пятница, туплю.

Dropbox - средство синхронизации и бэкапа файлов.
NEW 12.05.06 16:35
in Antwort Simple 12.05.06 16:28
Тут все просто: функция получает копию объекта
------
Это тебе так хочется. Тем не мение - построение объекта и передача объекта в качестве параметра есть несколько разные операции и между ними вполне может произойти куча всякой всячины.. ну и такая малость, как вызов деструктора объекта...
------
Это тебе так хочется. Тем не мение - построение объекта и передача объекта в качестве параметра есть несколько разные операции и между ними вполне может произойти куча всякой всячины.. ну и такая малость, как вызов деструктора объекта...

12.05.06 16:35
in Antwort Murr 12.05.06 16:31
Да, не, я удалил сообщение, до меня дошли ответы.
Dropbox - средство синхронизации и бэкапа файлов.