c++ 开关返回内/外大括号?打破?

问题描述 投票:0回答:1

在 C++ 中,除非声明变量,否则不必在 switch 语句中将大括号 {} 放在 case 内。

考虑以下代码:

int Lesson82a() {
    int test = 1;
    switch (test) {
    case 1:
    {
        int i = 1;
        cout << i << "\n";
        cout << "Inside braces" << "\n";
        return 0;
    }
    case 2:
        cout << "2" << "\n";
    case 3:
        cout << "3" << "\n";
    }
    return -1;
}

int Lesson82b() {
    int test = 1;
    switch (test) {
    case 1:
    {
        int i = 1;
        cout << i << "\n";
    }
    cout << "Outside braces" << "\n";
    return 0;
    case 2:
        cout << "2" << "\n";
    case 3:
        cout << "3" << "\n";
    }
    return -1;
}

void Lesson82() {
    int test = Lesson82a();
    cout << test << "\n";
    test = Lesson82b();
    cout << test;
}

运行Lesson82()时,输出如下:

1
Inside braces
0
1
Outside braces
0

所以结果是相同的,但它有什么不同吗?最佳实践是什么?

  1. 无论是否声明变量,我是否都应该加上大括号?
  2. 如果我放大括号,将案例的所有代码放在大括号内有什么关系吗?或者仅需要我声明的变量的代码,例如在 Lesson82b() 中,我在大括号后面运行一些代码和 return 语句。
  3. 即使无法访问,我是否应该在返回后放置
    break;

编译的时候有什么区别吗?

在第 122 行:https://github.com/microsoft/Windows-classic-samples/blob/main/Samples/Win7Samples/begin/LearnWin32/BaseWindow/cpp/main.cpp#L122我无法理解为什么 return 语句在大括号之外。

我尝试进行实验,但无论如何,我在代码中得到了相同的结果。

c++ scope switch-statement braces
1个回答
0
投票

无论是否声明变量,我都应该放大括号吗?

在这种情况下不需要大括号,除非你发现这样更清楚,否则不需要。

如果我放大括号,将案例的所有代码放在大括号内有什么关系吗?或者仅需要我声明的变量的代码,例如在 Lesson82b() 中,我在大括号后面运行一些代码和 return 语句。

不,没有。只有需要访问大括号内声明的变量的代码才需要位于大括号内。

我应该休息吗?返回后即使无法访问?

不,这是完全没有必要的,并且不会以我所看到的任何方式改善阅读。

© www.soinside.com 2019 - 2024. All rights reserved.