Reputation: 385264
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 is no scope created by the if
because no actual block ({}
) follows it.
Upvotes: 11
Views: 475
Reputation: 385264
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
Upvotes: 25
Reputation: 1092
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.
Upvotes: 2