Is the following code valid? If so, what is the scope of x
?
int main()
{
if (true) int x = 42;
}
My intuition says that there i
GCC 4.7.2 shows us that, while the code is valid, the scope of x is still simply the conditional.
This is due to:
[C++11: 6.4/1]:
[..] The substatement in a selection-statement (each substatement, in theelse
form of theif
statement) implicitly defines a block scope. [..]
Consequently, your code is equivalent to the following:
int main()
{
if (true) {
int x = 42;
}
}
It's valid in terms of the grammar because the production for selection statements is thus (by [C++11: 6.4/1]
):
selection-statement:
if
( condition ) statement
if
( condition ) statementelse
statement
switch
( condition ) statement
and int x = 42;
is a statement (by [C++11: 6/1]
):
statement:
labeled-statement
attribute-specifier-seqopt expression-statement
attribute-specifier-seqopt compound-statement
attribute-specifier-seqopt selection-statement
attribute-specifier-seqopt iteration-statement
attribute-specifier-seqopt jump-statement
declaration-statement
attribute-specifier-seqopt try-block
My Visual studio says that time of life of your variable x is pretty small - just while we are inside operator if, so x vill be destroyed when we are out of if condition, and there is absolutely no meaning to declare variables like this.