Re: The for-init-statement in a for statement
"Matthias Hofmann" <hofmann@anvil-soft.com> schrieb im Newsbeitrag
news:44c2219a$0$24892$9b4e6d93@newsread4.arcor-online.net...
Hello everybody!
When I first learned learned C++, I often encountered statements like
for ( ;; ) {}
instead of
while ( true ) {}
Also, I found code in the VC++ implementation of STL algorithms that
omitted
the for-init-statement in for statements, for example in:
template <class _FwdIt, class _Ty> inline
void fill( _FwdIt _First, _FwdIt _Last, const _Ty& _Val )
{
for( ; _First != _Last; ++_First )
_First = _Val;
}
This seems to make perfect sense, but 6.5.3/1 of the C++ Standard says
that
the for-init-statement cannot be omitted. Does that mean that the
implementation of fill() above is not portable? Would it have to be
rewritten as follows to be standard compliant?
template <class _FwdIt, class _Ty> inline
void fill( _FwdIt _First, _FwdIt _Last, const _Ty& _Val )
{
while ( _First != _Last )
{
_First = _Val;
++_First;
}
}
By the way, I noticed that my version of the C++ Standard defines the for
statement as follows:
for ( for-init-statement condition opt ; expression opt ) statement
I guess there is a semicolon missing right before "condition"?
No. It is not missing there. Look at the definition of for-init-statement
and follow the "links" you find there. You'll find out that a
for-init-statement may be an "expression opt ;" or a "decl-specifier-seq opt
init-declartor-list opt ;" Both of them bring their own semicolon and so it
is not missing in the definition of a for statement. If the semicolon, which
you think is missing, were present, you would have to write something like
"for (int i = 0;; i < 10; ++i) ...", which is probably not what anyone would
like to write.
But there seems to be a bug in the standard (at least the PDF file I have).
The for-init-statement in a for statement like "for (; ...)" might be an
expression-statement with an empty expression or a simple-declaration where
decl-specifier-seq and init-declarator-list are both empty.
Heinz
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]