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.
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-seqoptexpression-statement
attribute-specifier-seqoptcompound-statement
attribute-specifier-seqoptselection-statement
attribute-specifier-seqoptiteration-statement
attribute-specifier-seqoptjump-statement
declaration-statement
attribute-specifier-seqopttry-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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With