By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
446,132 Members | 1,948 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 446,132 IT Pros & Developers. It's quick & easy.

order of evaluation

P: n/a
//code.begin()
#include <iostream>

int g (int i)
{
static const int j = i;
return j;
}

int main (int, char**)
{
std::cout << g(0) << g(1) << g (2) << g(3);
return 0;
}
//code.end()

Is output of this program undefined due to C++ standart?
Compilers i have access to (msvc 7.1 and gcc 3.3) both produce "3333"
output.
--Sasha

Jul 23 '05 #1
Share this Question
Share on Google+
3 Replies


P: n/a

"ASobol" <so***@mccme.ru> wrote in message
news:11**********************@o13g2000cwo.googlegr oups.com...
//code.begin()
#include <iostream>

int g (int i)
{
static const int j = i;
return j;
}

int main (int, char**)
{
std::cout << g(0) << g(1) << g (2) << g(3);
The compiler is allowed to determine the order in which the 4 calls to g()
are executed.
return 0;
} //code.end()

Is output of this program undefined due to C++ standart?


Undefined behaviour. See:
http://www.parashift.com/c++-faq-lit...html#faq-38.16
http://www.parashift.com/c++-faq-lit...html#faq-38.15
http://www.langer.camelot.de/Article...ncePoints.html

Regards,
Sumit.
--
Sumit Rajan <su*********@gmail.com>
Jul 23 '05 #2

P: n/a

Sumit Rajan wrote:
"ASobol" <so***@mccme.ru> wrote in message
news:11**********************@o13g2000cwo.googlegr oups.com...
//code.begin()
#include <iostream>

int g (int i)
{
static const int j = i;
return j;
}

int main (int, char**)
{
std::cout << g(0) << g(1) << g (2) << g(3);
The compiler is allowed to determine the order in which the 4 calls

to g() are executed.


Yes, but it may not execute them concurrently (unless you cannot detect
it, of course. "as if"-rule ). One call must be made first. It may be a
different choice on every run, though.
Is output of this program undefined due to C++ standart?


Undefined behaviour.


Wrong, unspecified. There are proper sequence points between the
calls, the only thing unspecified is the order of sequence points.
No variable is modified twice between sequence points. In fact,
the only variable modified is static const int j, which by
definition cannot be modified twice at all.

Regards,
Michiel Salters

Jul 23 '05 #3

P: n/a
"msalters" <Mi*************@logicacmg.com> wrote in message
news:11**********************@f14g2000cwb.googlegr oups.com...
Undefined behaviour.


Wrong, unspecified.


You're right. Thanks for pointing that out.

Regards,
Sumit.
--
Sumit Rajan <su*********@gmail.com>
Jul 23 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.