why i cant instantiate objects inside a switch-case block

前端 未结 3 875
无人及你
无人及你 2021-02-15 12:36

my code has 3 classes n_hexa,n_octa,n_bin. The code is here

switch(choice)
{
case 1: cin>>n; 
 n_hexa nx(n);
        break;
case 2: cin>>n; 
 n_octa          


        
3条回答
  •  春和景丽
    2021-02-15 12:46

    Ebomike's post has the answer to get rid of the errors. Now the reason is,

    From Standard docs 6.7.3,

    It is possible to transfer into a block, but not in a way that bypasses declarations with initialization. A program that jumps77) from a point where a local variable with automatic storage duration is not in scope to a point where it is in scope is ill-formed unless the variable has trivial type (3.9) and is declared without an initializer (8.5).

    An example from the Standard docs itself,

    void f()
    {
    // ...
    goto lx; // ill-formed: jump into scope of a
    // ...
    ly:
    X a = 1;
    // ...
    lx:
    goto ly; // OK, jump implies destructor
    // call for a followed by construction
    // again immediately following label ly
    }
    

    In which the statement goto lx; is ill-formed because it is being jumped to the statement lx, where the scope of a is visible.

    Also,

    77)The transfer from the condition of a switch statement to a case label is considered a jump in this respect.

    So, this applies to switch as well.

    And if braces {} are put in them, the scope is limited to the braces and you are free to declare within each case statement.

    Hope that helps..

提交回复
热议问题